有意思的递归

2个递归经典的例子

先来一个入门的:
上初中学习数列求和什么的时候我们就学过高斯的计算1到100的自然数的和的经典课文,那么如果我们现在用程序的话该怎么来做呢?
自然是循环来做这件事。
如果不用循环怎么做呢?

def sum(first, end):
    if end == 1:
        return first
    elif end > 1:
        return sum(first + end, end-1)
print(sum(1,100))

结果是5050,根当时高斯算出来的结果是一样的。
当然了,这个sum函数还能算任意的1到任何的n的自然数之和。

斐波那契数列
第一项是1,第二项是1,第三项是前俩项的和,依次类推。
表达式:F0=1,F1=1,F2=2,F3=3, …..Fn = Fn-1+Fn-2
实际的样子:1,1,2,3,5,8,13,21…….

如果想得到第N项的值我们该如何做呢?

def fib(n):
    if n == 1:
        return 1
    elif n == 2:
        return 1
    elif n > 2:
        return fib(n-1)+fib(n-2)

这样的话我们就可以调用fib函数来算出第n项的值。

更有意思的就是汉诺塔了,

有3个杆子,有一个杆子上面套着从小到大的一排圆盘,要想把一个杆子上的所有圆盘都移动到另一个杆子上,条件是圆盘必须是大的在下面,小的在上面。要像将圆盘移动到另一个杆子上所用的最短的步数。

def move(n, A, B, C):
    if(n == 1):
        print(A, '->', C)
    else:
        move(n-1, A, C, B)
        move(1, A, B, C)
        move(n-1, B, A, C)

move(3, 'A', 'B', 'C') 

结果如下

A->C
A->B
C->B
A->C
B->A
B->C
A->C

是不是很神奇。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Stephen_112

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值