標題:
c費式數列解f(12)??
- 2010秋冬男生髮型@1@
- 從新莊怎麼去小巨蛋??@1@
- cornell university
- 兩萬六組主機 謝謝!
- 假扣押查封提出 限限期起訴@1@
- 我想賣電腦~~看看可以賣多少-
- 台大夜間部+20
- DDR400記憶體512-4@1@
- LGA775-CPU有分32或64位元嗎-
- 依家係麗城花園租屋,大概要幾多錢﹖
此文章來自奇摩知識+如有不便請留言告知
發問:
int f(int n) { return ((n
最佳解答:
哇~要解釋過程就會超辛苦了 這是題目中出現的語法: 條件?敘述1:敘述2; 如果條件是真的,就採用敘述1,不然就採用敘述2 在這個例子條件是n>=1, 所以n=2,3,4,5,...的時候條件會是假的,就採用敘述2 要是代入n=2, 條件為假,所以採用敘述2,也就是冒號後面的那個 所以電腦會去計算f(n-1)+f(n-2) 在這裡n=2, 所以電腦要算的是f(1)+f(0) f(1)就是1,因為當n=1,條件成立,所以採用敘述1 f(0)在這條式子中也變成1,因為條件n1就再開一個新分頁, 然後自己就發呆等答案 比方說,要是你呼叫f(12) 喔,就開一個分頁啦。 這個分頁會計算f(12)=f(11)+f(10) 但是這兩個數字他都不知道,所以他就再呼叫兩個分頁 一個算f(11),另一個算f(10) 然後他就發呆,等到這兩個數字都回來了以後,他就把他們加起來, 然後傳回去。 return就是回傳的意思,傳回哪裡? 誰呼叫它它就傳回哪裡,工作完成以後它就自己關掉。 開了一大堆分頁以後就會算出f(12)=233。 ================================================ 第2題在問什麼呢?他在問""要算出f(12)一共呼叫了幾次?"" 也就是總共開過幾個分頁啦。 讓我們來計算一下: 要算出f(0)共需要1個分頁 f(1)要1個。 f(2)要3個,因為你要先呼叫f(2)[一個],f(2)再呼叫f(1)和f(0) 所以共3個。 f(3)要5個,因為呼叫f(3)[一個],f(3)呼叫f(2)和f(1),f(2)要3個,f(1)要一個 總共5個。 所以歸納出數學式: 分頁數T(n)=T(n-1)+T(n-2)+1,最後那個1是呼叫T(n)時用的。 所以列出數列: 1,3,5,9,15,25,41,67,109,177,287,465 所以要算出f(12)需要開465個分頁。 極限的沒效率,這麼多分頁當中其實有452個是和其他分頁重複的。 每開一個分頁,就會先宣告一個變數n,用來接別人丟下來的資料。 1個整數4個bytes(dev c++),465個分頁就直接吃掉1860個bytes。 資料量小一點還好,輸入大一點的n就會爆掉了。 詳細的遞迴過程你可以畫出一點點的樹狀圖來觀察, 不用畫完啦,465個會畫到爛掉= = 2010-08-07 13:57:18 補充: 奇怪?為什麼名字變了啊= =
其他解答:6FE1C1721610E824
留言列表