【Python学习笔记Day23】4.7 函数之递归二

4.7 函数之递归二

  • 1. 斐波那契(fibonacci)数列的实现
      • 1)用迭代的函数实现
      • 2)递归函数

【Python学习笔记Day23】4.7 函数之递归二_第1张图片

1. 斐波那契(fibonacci)数列的实现

1,2,3,5,8,13,21,34,55,89,144…
黄金比0.618,前一个比后一个数的值,越接近0.618
数学函数来定义:

F(n)=1,当 n = 1
    =1,当 n = 2
    =F(n-1) + F(n-2),当 n > 2

1)用迭代的函数实现

def fab(n):
    n1 = 1
    n2 = 1
    n3 = 1

    if n < 1:
        print('输入错误!')
        return -1
    
    while n - 2 > 0:
        n3 = n1 + n2
        n1 = n2  #把n2,n3 的值赋值给n1,n2再给n3,即一步一步得到最终值
        n2 = n3
        n -= 1
        
    return n3

result = fab(35)
if result != -1:  #等于-1说明程序报错
    print('总共有%d对兔子诞生!'% result)

2)递归函数

需要两个返回值

def fab1(n):
    if n < 1:
        print('输入错误')
        return -1

    if n == 1 or n == 2:
        return 1
    else:
        return fab1(n-1) + fab1(n-2)

result1 = fab1(35)
if result1 != -1:
    print('总共有%d对兔子诞生!' % result1)

可以比较一下这两个代码的执行时间,第二个使用递归算法的时间明显高于迭代算法,这也是递归算法的不足之处
在这里插入图片描述
有点类似分治思想
下节介绍汉诺塔游戏的代码,可以看到递归的用处使用得当,能够极大的提高代码的运行效率,使解决问题的方法变得容易

你可能感兴趣的:(Python脚本语言)