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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
    

 



以上是关于Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列的主要内容,如果未能解决你的问题,请参考以下文章

Python中的匿名函数及递归思想简析

Python用迭代(yield)和递归解决八皇后问题

python中的函数递归和迭代问题

深究递归和迭代的区别 联系 优缺点及实例对比

递归和分治思想

采用递归与迭代法思想,分别用java编程去实现欧几里德,斐波那契,牛顿迭代法