递归:斐波那契数列

部署运行你感兴趣的模型镜像

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

写文章主要是想提升自己代码与算法能力,有时总是看完理解,但轮到自己写的时候却写不出。之前都是写其他语言的多写写算法提升一下写python的能力。


一、问题

斐波那契数列是指这样一个数列:0,1,1,2,3,5,8,13,21,34,55,89……这个数列从第3项开始 ,每一项都等于前两项之和。求斐波那契数列第26个数字是多少

二、递归的特征

特征一.调用自身

斐波那契数列有很明显的特征就是结果F(n)与他上两个数F(n-1),F(n-2)有关F(n-1)的值与他上两个数F(n-2),F(n-3)有关。一直这样找出函数的上一个值。
我们先定义一个方法

def Fibonacci(n):
    return Fibonacci(n-1)+Fibonacci(n-2)

这段代码也就是F(n)=F(n-1)+F(n-2)
只是这样肯定是不行的python会直接报错。

特征二.结束条件

如果一直这样调用自身很明显是一个死循环,所以我们要让函数跳出死循环,就要写结束条件。那结束条件是什么呢?观察现在的函数我们可以发现n<0也能继续运行,但是斐波那契数列并没有小于0的数,所以我们第一个条件就是n不能小于0

def Fibonacci(n):
    if n<=0:
        return 0
    else:
        return Fibonacci(n-1)+Fibonacci(n-2)

我们会发现无论输入什么结果都是0,那是因为一直递归下去都会成为负数所以返回值都是0比如:n=3
Fibonacci(2)+Fibonacci(1),我们先别看后面+Fibonacci(1),Fibonacci(2)值并不知道继续递归n=2
Fibonacci(1)+Fibonacci(0),Fibonacci(1)同理。递归n=1
Fibonacci(0)+Fibonacci(-1)=0。这时因为我代码里小于等于0的数都返回0于是这样的结果就是0。
我们要有第二个条件,第二个条件就是斐波那契数列第二个数字1

def Fibonacci(n):
    if n<=0:
        return 0
    elif n==1:
        return 1
    else:
        return Fibonacci(n-1)+Fibonacci(n-2)

这样递归的调用自身与结束条件都写好了,我们可以运行一下。

def Fibonacci(n):
    if n<=0:
        return 0
    elif n==1:
        return 1
    else:
        return Fibonacci(n-1)+Fibonacci(n-2)
print(Fibonacci(26))

这里python会直接输出

121393

三、递归解决斐波那契数列的局限性

递归并不是最好的解决斐波那契数列第n个数是几的方法。在实际运行时会发现当求第40个以上斐波那契数列时就会变慢,运行时尽量用小一点的数字。但斐波那契数列确实是一个递归很好的例子,所以我才举例斐波那契数列作为递归的介绍。

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值