python的递归函数

python的递归函数:Recursive Function。
通俗一点说,递归函数的意思就是在函数内部调用函数本身。
归纳了递归函数的几个特点:
1、定义递归函数,要先试着去找到让函数终止的条件。
2、函数会通过不断的调用自身,实现算法的目的。
3、递归函数过深的调用会导致栈溢出,这一点要小心。

以下举了几个例子说明递归函数是如何实现的:

一、需求:1+2+3+4+…+100=?
实现代码如下:

def digui(b):
    if b==1:
        return 1
    else:
        return b + digui(b-1)

其中b==1,就是函数中止的条件。执行调用这个函数:

print(digui(100))

最后得到执行结果:

5050

二、汉诺塔
汉诺塔起源于印度一个古老传说的益智玩具。如果不明白汉诺塔的玩法,请自行百度一下。
我们对三个柱子分别命名为a, b, c,
a定义为起始柱,c定义为目标柱。
整个移动过程可以描述为:
如果a只有一个圆盘,那就直接移动到c,这个是作为函数中止的条件。
视圆盘有n个,则n=1+(n-1),
这里可能不太好理解。我们拆开理解:
n=1+(n-1),这其中1是第一部分,n-1是第二部分。
先把n-1的部分,移动到b柱,再把剩余的1从a柱移动到c柱,最后再把n-1那一部分,从b柱移到c柱。
代码如下:

def move(n, a, b, c):
    if n==1:
        print (a,">",c)
        return
    else:
        move(n-1, a, c, b)
        move(1, a, b, c)
        move(n-1, b, a, c)

调用并执行这个函数:

move(4,"a","b","c")

可以看到程序会自动打印出整个汉诺塔执行的过程:

a > b
a > c
b > c
a > b
c > a
c > b
a > b
a > c
b > c
b > a
c > a
b > c
a > b
a > c
b > c

三、斐波拉契数列
通过递归可以算出斐波拉契数列的值,这个数列又被称为兔子数列。
什么意思呢,就是说这个数列从第3项开始,每一项都等于前两项之和,如1、1、2、3、5、8、13、21、34,
我们定义一个递归函数,输入一个值n,这个值代表的是斐波拉契数列中第n项,反馈第n项的值。
当然斐波拉契数列有很多种实现方法,我们这里只讨论递归。
代码如下:

def fib(num):
    if num <= 2:
        return 1
    else:
        return fib(num-1) + fib(num-2)

猜你喜欢

转载自blog.csdn.net/fangfu123/article/details/82048733