递归

别等时光非礼了梦想. 提交于 2019-12-01 20:54:34

递归方法

待整理,未完…
递归的定义:
递归调用是一种特殊的嵌套调用,是某个函数调用自己或者是调用其他函数后再次调用自己的,只要函数之间相互调用能产生循环的则一定是递归调用。

一个递归算法必须包括终止条件递归部分

相关的题目

递归函数中的形参是()
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.汉诺塔问题
f(n)f(n)为n个圆盘的汉诺塔总的移动次数,其递归方程为f(n)=f(n1)+1+f(n1)=2f(n1)+1f(n) = f(n-1)+1+f(n-1) = 2f(n-1)+1,
理解:
先把上面的n-1个圆盘移动到第二个柱子上(共f(n1)f(n-1)步),再把最后一个圆盘移动到第三个柱子(共1步),再把第二个柱子上的圆盘移动到第三个柱子上(共f(n-1)步)。

2.跳台阶问题
问题描述,有一段楼梯台阶有15级,青蛙最多只能跳3级,青蛙跳上这段台阶共有多少次不同的跳法?

假设跳n级台阶的方法总数为f(n)f(n),那么对于n步的阶梯,有三种情况:
第一次跳一阶
第一次跳两阶
第一次跳三阶,
那么跳完第一次后,剩下的走法分别有f(n1),f(n2),f(n3)(n&gt;3)f(n-1),f(n-2),f(n-3)(对于n&gt;3的情况)
而对于n<=3有以下定义:
f(1)=1f(2)=2f(3)=3 f(1)=1 \\ f(2)=2 \\ f(3)= 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)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!