递归方法
待整理,未完…
递归的定义:
递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间相互调用能产生循环的则一定是递归调用。
一个递归算法必须包括终止条件和递归部分。
相关的题目
递归函数中的形参是()
A.自动变量 B.外部变量 C.静态变量 D.可根据需要自动以存储类型
存储类型有:
- auto
- static
- register
- extern
递归式借助栈来实现的,自动变量是存储在栈里面的,随着递归的进行,自动创建和销毁。
外部变量和静态变量是不能作为递归函数的参数的。自动变量大体上等价于局部变量,但也不完全相同
只有那种使用了局部变量的递归过程在转换成非递归过程时,才必须使用栈()
A.对 B.错
递归工作栈里面包括返回地址、本层的局部变量和递归调用的形参代换用实参,所以正常情况下,无论递归过程有没有使用局部变量,转换为非递归过程都需要用栈来模拟这个递归调用过程。
递归程序优化的一般手——尾递归优化
斐波那契数列的两种递归方法
# 一般递归方法
def fab(n):
if (n<3):
return 1
else:
return fab(n-1) + fab(n-2)
# 具有‘线性迭代过程’特性的递归——尾递归过程
def fab1(n,b1=1,b2=1,c=3):
if (n<3):
return 1
else:
if n == c:
return b1+b2
else:
return fab1(n,b2,b1+b2,c+1)
应用
1.汉诺塔问题
设为n个圆盘的汉诺塔总的移动次数,其递归方程为,
理解:
先把上面的n-1个圆盘移动到第二个柱子上(共步),再把最后一个圆盘移动到第三个柱子(共1步),再把第二个柱子上的圆盘移动到第三个柱子上(共f(n-1)步)。
2.跳台阶问题
问题描述,有一段楼梯台阶有15级,青蛙最多只能跳3级,青蛙跳上这段台阶共有多少次不同的跳法?
假设跳n级台阶的方法总数为,那么对于n步的阶梯,有三种情况:
第一次跳一阶
第一次跳两阶
第一次跳三阶,
那么跳完第一次后,剩下的走法分别有
而对于n<=3有以下定义:
def jump(n):
if n <=0:
return 0
if n == 1:
return 1
elif n==2:
return 2
elif n == 3:
return 4
return jump(n-1)+jump(n-2)+jump(n-3)
来源:CSDN
作者:半捧银河醉
链接:https://blog.csdn.net/weixin_40947140/article/details/100075958