推 chaochienyao:又有階層的FU了 11/21 22:28
: 第七題:(10分)
: 請計算並列印出費朋納西序列(Fibonacci sequence)之前二十項,
: 請注意列印之每一行共有五個數(合計四行)。
: 提示:費朋納西序列為 1, 1, 2, 3, 5, 8, 13, 21, 34,.....
: ───────────────────────────────────
: 答案欄:(空間不夠時請寫於背面)
網站公佈正解是使用遞迴來解
但遞迴是三小朋友我不知道
我提供我的土法煉鋼做法, 大家笑笑就好
#include "stdafx.h"
#include <iostream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
int value1=0;
int value2=1;
int temp=0;
for(int i=1;i<=20;i++)
{
cout << value2<<"\t";
temp=value2;
value2=value1+value2;
value1=temp;
if(i%5==0)
{
cout<<endl;
}
}
system("PAUSE");
return 0;
}
可能有人看不懂, 我解釋一下
費式數列是後面一項等於前面兩項之和這是廢話我不贅述
所以我用兩個變數value1, value2來紀錄要相加的兩項
然後把原本的value2值要存進value1, value1+value2存進value2
以做於下次要呈現後面的項數, 要拿來加的新value1 value2
value1=value2;
value2=value1+value2;
但是發生了錯誤, 我先做存進value1的動作,
然後下面要存進value2的兩項之和的value1卻已不是原本的, 是先被我更新過的
所以我製造變數temp 這個拿來當做暫存檔
讓
temp=value2;
value2=value1+value2;
也就是說 相加的那兩項還是原本的
之後再
value1=temp;
再把暫存檔存進我要存進的value1裏
就是這樣
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.241.27