Day 11, Data Structure- Coursera- Fibonacci

费波那契数

一个伪理科人最喜欢说的词语,只要说出这一词,顿时能成为全场话题终结者没有之一,一个跟费波那契回调听起来一样但其实不一样的事物,一个是跟兔子生育数有关(很会生),一个是跟网路股票知名听牌名人分析时的话术,甚么黄金比例预测股票上扬,我每天多吃一份鸡腿便当体重会逐年上升还比较準。好了,为甚么我今天会提这个呢?
因为,我今天上coursera的课程开始感到时间停滞(这往往不是好现象),主讲者秀出了不同版本的费波那契数公式,但却感觉在拖时间,因为他一直强调演算法的重要性,然而却不解释任一其中费波纳契数在干嘛,为了让我能找回学习的动力,我决定自己打一份费波纳契数的程式。
费波纳契数公式:
F0=0
F1=1
Fn=Fn-1+Fn-2(n≧2)
将公式带入执行,结果呈列出来我们会看见:
0、1、 1、 2、 3、 5、 8、 13、 21、 34、 55、 89、 144、 233、 377、 610、 987......
正如Fn=Fn-1+Fn-2(n≧2)一样,下一笔数值是前两项数值的加总,而这是大自然中常见的黄金比例,例如贝壳。
http://img2.58codes.com/2024/20149573414aha1oYC.jpg

至于如何呈现出能快速计算出费波纳契数的程式,靠的是观察和一点小巧思(你也可以说小聪明,我不介意),这题就如同Day 10的问题,也许能宣告vector进行计算,然而随着迴圈地进行还一直呼叫之前的index(ex: f[n-1]),会导致计算时间过长,如果有stress test就会得到time limit的结果,所以呢,我们要突破盲肠,放弃vector(误),以下是我的程式,仔细观察,就会知道我做了甚么:

//费波纳契数#include<iostream>using namespace std;int main(){while(true){long long a=0,b=1,c=0;int n;cin>>n;if(n==0){cout<<"F"<<n<<" is "<<a<<endl;}else if(n==1){cout<<"F"<<n<<" is "<<b<<endl;}else{for(int i=0;i<n-1;i++){c=a+b;//悄悄替换了一些东西a=b;//将b值给ab=c;//将c 值给b,想想我在干嘛}cout<<"F"<<n<<" is "<<c<<endl;}}return 0;}

虽然维基百科似乎有更简洁优美的範例程式,但我认为自己的产出也挺不错的(没错,就是没根据得自卖自夸)。

最后,当主讲者强调费波纳契数n值越大,越能感受到前值相加后庞大数能力时,我默默输入数值与他背后的範例比对
http://img2.58codes.com/2024/20149573CKAlm3Aixb.png
http://img2.58codes.com/2024/20149573eVfrgOTLSo.png
恩,完全正确了呢! I did it!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章