在看回溯的方法,重新回去看了眼递归
真是一入递归深似海。。。
递归是一个函数不断调用自己的过程,这个过程包括递 和 归 ,递就是调用自身的过程,归就是程序出口,如果一个递归没有出口,就意味着这个函数会一直调用自己,最后会导致递归超过深度,产生崩溃
下面用递归实现阶乘方法
def f(i): # 阶乘函数
if i == 0:
return 1 # 递归出口, 因为数学规定上0! = 1 所以定义这个递归出口是合理的
return i * f(i-1) # 递的过程,调用自身
f(5) # 120
同样用递归实现一个累加函数
def sum(i): # 从0累加到i
if i == 0:
return 0 # 递归出口
return i + sum(i-1)
sum(3) # 6
实际上在写递归的时候,需要明确自己的函数实现的是什么目的同时明确边界条件,也就是递归出口,这样在实现递归的时候就不会出错,可以抽象成高中数学中的数学归纳法,边界条件就是n=1 时成立的等式,不断使得 1 + 1+ 1 +1+。。。最后到达n,实际上这个过程就是就是递归中递的过程,而n=1 成立的条件就是递归中的归,也就是出口
下面用递归解决斐波那契数列问题
递推公式如下:f[n] = f[n-1] + f[n-2] , f[1] = f[2] = 1
def fib(i):
if i == 1:
return 1
if i == 2:
return 1
return fib(i-1) + fib(i-2)
好的接下来已经学会递归了,下面尝试一些解决回溯问题吧T^T