从斐波那契数列简单谈程序的几个层次
写一个生成斐波那契数列的程序,初学计算机迟早会写那么一次,至少看过别人的代码一次。
一、小鸟层次
仔细观察后,你会发现其实许多前面的运算结果是可以不保留的,那么三个临时空间就足够。速度比上一个版本还要快,空间到了完全可以接受的程度。极限主义者发现其实还可以进一步缩减到只用两个临时空间,但速度会变慢(为什么?判断次数多了),数学理论上有直接的公式,是否更快呢?因为涉及到乘法,其实并不能加快运算,就算使用快速乘法技术(n次方只需要log n 次乘法),依然会遇到精度问题,而且代码变得并不通俗易懂。那么一个完美主义者也可以接受这个版本了,时间复杂度优秀,空间复杂度优秀,代码没有精度问题可能导致的错误,代码简洁。C++中有模板元编程可以直接生成需要的斐波那契数,而且几乎不费程序时间(编译时间在n大的时候和第一个版本一样恐怖),但却要求n只能是常数。好了,你拥有一个完美主义者应该有的斐波那契数生成版本了。什么是好的代码?好的性能(时间复杂度),好的内存占用(尽量少),没有错误(尽量),代码简洁(至少保证自己半年还能读懂),知道尺度(不过于追求某些工程上极限技术,而更乐于本质的创新)。然后写好下一段代码!你写得最好的代码是什么?下一段!