递归

个人对递归的理解(python)

递归:函数自己调用自己的。

举栗子说明:假设你在一个电影院,你想知道自己坐在哪一排,但是前面人很多,你懒得去数了,于是你问前一排的人「你坐在哪一排?」,这样前面的人 (代号 A) 回答你以后,你就知道自己在哪一排了——只要把 A 的答案加一,就是自己所在的排了。不料 A 比你还懒,他也不想数,于是他也问他前面的人 B「你坐在哪一排?」,这样 A 可以用和你一模一样的步骤知道自己所在的排。然后 B 也如法炮制。直到他们这一串人问到了最前面的一排,第一排的人告诉问问题的人「我在第一排」。最后大家就都知道自己在哪一排了。

这就是递归,先递后归,一般传递过程不进行计算,而是归来的时候才计算。递归分为头递归和尾递归,递归和循环是可以互相转换的。

头递归:头递归只有第一个节点知道最终结果;调用过程不需计算,只需‘归’时计算结果

尾递归:尾递归上的每一个节点都知道最终结果,尾递归需要向后一个调用传递信息

一般我们写的递归是头递归,因为这比较符合我们大脑的思维方式,较容易理解。

下面举一些递归的栗子:
1.阶乘

def Fac(n):
    if n==0:#定义0的阶乘为1,即递归推出条件
        return 1
    else:
        return n*Fac(n-1) #递归的调用方法
a = eval(input('输入数字:'))
print(Fac(a))

2.斐波那契数列
(数列从第3项开始,每一项都等于前两项之和,也称兔子数列)

def fun(x):
    if x==1:
        return 1
    elif x==2:
        return 1 #前两项为1,是退出递归的条件
    else:
        return fun(x-2)+fun(x-1) #调用方法,某一项等于前两项之和
a = eval(input('输入数字:'))
print(fun(a))

3.汉诺塔(规则请自行百度)

def Han(n,a,b,c):
    if n == 1:
        print(a, '-->', c)
    else:
        Han(n-1,a,c,b)
        Han(1,a,b,c)
        Han(n-1,b,a,c)
print(Han(3,'A','B','C'))

注意形参是小写字母,实参是大写字母
比如Han(n-1,a,b,c)中,a=A,c=B,b=C,所以这里是打印
a–>c就是A–>B #把n-1个圆盘放到B

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值