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

这本身也也不难,但是题意比较含糊,自由发挥就可以,看你怎么理解了。
于是我试了几遍,第一次勉强成功的做法是:
勉强实现了打印第N个FIBO数,但是与我的目标不符,我是想要实现打印前N个FIBO数

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

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

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

为什么这种解法会大量重复呢,因为函数递归运算过程中 ,为了得出每个FIBO数就在大量重复了,而并不是一般人脑海中想的先得出FIBO1和FIBO2,然后FIBO3直接将FIBO1和FIBO2加起来就可以了。那为了实现我们的target: print all the numbers before No.n
该怎么做呢?
有一种笨方法,循环执行该函数然后打印,缺点是越到后面越慢,前面明明算出了从FIBO1到n-1的所有值,然而在算FIBOn的时候还是要将前面从1到n-1再重新算一遍。

没办法只好寻求一种新的算法,或许递归的方法,由一个数递归到两个数的这种做法是无法做到的。
现在又有两种思路:一种是采用列表List(数组),先算来把结果存进列表,在取出来打印,一存一取的过程耗时间且占内存;另一种是令a=fibo n-2 ,b = fibo n-1 然后又另a=a+b,b=b+a这样一直反复下去,缺点是没有记忆性...
在此题中第二种方法较快。


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