有意思的递归

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

是不是很神奇。

相关推荐
©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页