Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

什么是递归?简单的说就是:函数自身调用自身。

“普通程序员用迭代,天才程序员用递归”

虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢,

但在一些算法上面仍然是递归很实用

但需要注意的是:

#递归是自己调用自己 很消耗时间,还会有消耗空间的危险,所以递归递归一定要知道“归去来兮”

#所谓“归去来兮”就是指递归的两个原则:

#1.调用了函数自身

#2.设置了自身正确的返回值 (必须有一个正确的返回停止条件,不能无限下去)

举简单的例子

下面是用迭代和递归实现的阶乘的对比:

#用循环函数实现阶乘:
def factorial(n):
    for i in range(1,n):
        n *= i
    return n

#递归版本的阶乘实现:
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)

下面是用迭代和递归实现的Fibonacci数列的对比:

# Fibonacci 数列的递归实现:
 
 #1.用迭代的方式实现
def Fibonacci(n):
    n1 = 1
    n2 = 1
    n3 = 2
    if n < 0:
        return -1
        print('Error,please enter a correct month...')
    elif n == 1:
        return n1
    elif n == 2:
        return n2
    else:
        for i in range(3,n+1):
            n3 = n2 + n1
            n1 = n2
            n2 = n3
        return n3

 #2.用递归的方式实现
def fab(n):
    if n < 1:
        print('输入有误...')
        return -1
    elif n == 1 or n == 2:
        return 1
    else:
        return fab(n-1) + fab(n-2)