一、递归的常规格式
def test(n): #一般来说,都是对test(n)函数的参数进行改变,才会有递归的产生 if 对n的条件: #首先确定递归函数的结束调节,当满足条件时,返回所期望的最终值 retrun result 对n进行相应的赋值操作 #当条件不满足时,则对参数进行处理,以缩小范围,减小问题规模 test(new_n) #自身调用自身,实现递归
注意:使用递归时,要确保test(n)和test(new_n)所执行的过程完全一致。
二、递归函数的运行过程
def calc(n): print(n) if int(n/2) == 0: return n res = calc(n/2) return res calc(5)
从上图可以看出,只要参数n除以2得到的伤不等于零时,就会将商作为calc()函数的参数再次调用函数。再此过程中,上一层的函数其实并没有结束,最后一句的return res是到最后得出结果后,一层一层向上传入的。所以说明递归的运行占用内存很大。
三、汉诺塔是实现
def haino(n, x, y, z): if n == 1: print(x, "->", z) #最终期望x轴上只有一个盘,最后放到z轴上 else: haino(n - 1, x, z, y) #将除最后一个盘外的所有盘,从x轴放到y轴上 print(x, "->", z) #这样,就能将最后一个盘,从x轴放到z轴上 haino(n - 1, y, x, z) #将剩下的盘从y轴借助x轴放到z轴上 haino(3, "x", "y", "z")
x -> z
x -> y
z -> y
x -> z
y -> x
y -> z
x -> z
原文:https://www.cnblogs.com/b939524101/p/9191551.html