python怎么把遍历出来的数放进列表里_斐波那契数列的打印与后序遍历

本文探讨了多种生成Fibonacci数列的方法,包括递归、列表存储及迭代计算等,并对比了各种方法的效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

497f2d32d2e66172849b428223c66f53.png

学python的时候看到了一道题,如下:

e7fd0452a6e4b4fdb1b7966314ed694e.png

这本身也也不难,但是题意比较含糊,自由发挥就可以,看你怎么理解了。

于是我试了几遍,第一次勉强成功的做法是:

勉强实现了打印第N个FIBO数,但是与我的目标不符,我是想要实现打印前N个FIBO数

b86b291172082635633de13afb3fb9b7.png

又试了几遍,比较滑稽的是第一次做的,递归了两遍,结果就自然不用说了

2b14330ba83d44cac98fd70ea128813c.png

来看下一遍做出的,乍一看似乎不会有什么问题,递归——>返回结果——>打印,画出树状图之后才看得出具体问题出自哪里

9d1ec8b0099bd59f854332098edcca52.png

左右根的顺序遍历称为后序遍历 

2c79d9771ea294442328af6fa4daf454.png
树状图分析

为什么这种解法会大量重复呢,因为函数递归运算过程中 ,为了得出每个FIBO数就在大量重复了,而并不是一般人脑海中想的先得出FIBO1和FIBO2,然后FIBO3直接将FIBO1和FIBO2加起来就可以了。那为了实现我们的target: print all the numbers before No.n 

该怎么做呢?

有一种笨方法,循环执行该函数然后打印,缺点是越到后面越慢,前面明明算出了从FIBO1到n-1的所有值,然而在算FIBOn的时候还是要将前面从1到n-1再重新算一遍。

6071f844d0025f2a69bfc0b2c8938cee.png

没办法只好寻求一种新的算法,或许递归的方法,由一个数递归到两个数的这种做法是无法做到的。

现在又有两种思路:一种是采用列表List(数组),先算来把结果存进列表,在取出来打印,一存一取的过程耗时间且占内存;另一种是令a=fibo n-2 ,b = fibo n-1 然后又另a=a+b,b=b+a这样一直反复下去,缺点是没有记忆性...

在此题中第二种方法较快。

b9fcdceb6ec70dbdc69f2f9cbd13265e.png

ca294ec3e0af07855dbdd4938f52de18.png
Fibonacci(999)

即使是打印前999个Fibonacci数列都只花了不到2秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值