递推:像上边递归实现所拆解,递归每一次都是基于上一次进行下一次的执行,这叫递推 回溯:则是在遇到终止条件,则从最后往回返一级一级的把值返回来,这叫回溯 什么是递归? 1.递归用一种通俗的话来说就是自己调用自己,但是需要分解它的参数, 2.让它解决一个更小一点的问题,当问题小到一定规模的时候, 3.需要一个递归出口返回。 1.递归必须包含一个基本的出口(base case), 否则就会无限递归,最终导致栈溢出。 比如这里就是n==0返回1 2.递归必须包含一个可以分解的问题(recursive case). 要想求得fact(n),就需要用 n*fact(n-1) 3.递归必须要向着递归出口靠近(toward the base case). 这里每次递归调用都会n-1,向着递归出口n==0靠近 注意: 1.递归算法解题通常显得很简洁,但递归算法解题的运行效率较低,所以一般不提倡用递归算法设计程序。 2.在递归调用的过程中系统为每一层的返回点、局部量等开辟了栈来存储,递归次数过多容易造成栈溢出等。 多个参数的递归示例: 斐波那契数列:就是前两个数的和为后一个数的值(0,1,1,2,3,5,8,13.........) def foo(arg1,arg2,stop): if arg1 == 0: print(arg1,arg2) arg3 = arg1 + arg2 print(arg1