全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:3452
推到 Plurk!
推到 Facebook!

如何計算費氏數列運算加法的次數呢

尚未結案
landochu
一般會員


發表:23
回覆:20
積分:8
註冊:2003-12-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-10-20 09:34:00 IP:211.22.xxx.xxx 未訂閱
請問各位大大 如何使用遞迴寫出費氏數列運算加法的次數呢 例: int fib(n){ if (n==0 || n==1) return n; else return fib(n-1) fib(n-2); } 如上,如果n為4,如何去計算總共執行了幾次加法呢? ps:需用遞迴之方法
pkdemon
初階會員


發表:2
回覆:51
積分:25
註冊:2004-09-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-10-20 11:36:27 IP:211.22.xxx.xxx 未訂閱
landochu你好 你可以設個全域變數來計算次數,或是在呼叫fib的時候加的計算次數的指標 希望這對你有幫助
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-10-20 12:01:35 IP:61.63.xxx.xxx 未訂閱
引言: 請問各位大大 如何使用遞迴寫出費氏數列運算加法的次數呢 例: int fib(n){ if (n==0 || n==1) return n; else return fib(n-1) fib(n-2); } 如上,如果n為4,如何去計算總共執行了幾次加法呢? ps:需用遞迴之方法
landochu你好: 直接用你的程式加 class="code"> ~~ int cnt=0; ~~ int fib(int n) { if (n==0 || n==1) return n; else { cnt ; return fib(n-1) fib(n-2); } } 硬要獨立寫一個recursive程式也行: int AddCnt(int n) { if (n==0 || n==1) return 0; else return 1 AddCnt(n-1) AddCnt(n-2); } 注意這裏參數n都是表示項數哦!
landochu
一般會員


發表:23
回覆:20
積分:8
註冊:2003-12-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-10-22 10:18:10 IP:211.22.xxx.xxx 未訂閱
加個全域變數應該行的通    但..return 1+AddCnt(n-1)+AddCnt(n-2); 如果使用這個方法 會不會導致1加上AddCnt(n-1)+AddCnt(n-2)的值,而不只是單純的加1而以呢
引言:
引言: 請問各位大大 如何使用遞迴寫出費氏數列運算加法的次數呢 例: int fib(n){ if (n==0 || n==1) return n; else return fib(n-1) fib(n-2); } 如上,如果n為4,如何去計算總共執行了幾次加法呢? ps:需用遞迴之方法
landochu你好: 直接用你的程式加 class="code"> ~~ int cnt=0; ~~ int fib(int n) { if (n==0 || n==1) return n; else { cnt ; return fib(n-1) fib(n-2); } } 硬要獨立寫一個recursive程式也行: int AddCnt(int n) { if (n==0 || n==1) return 0; else return 1 AddCnt(n-1) AddCnt(n-2); } 注意這裏參數n都是表示項數哦! < face="Verdana, Arial, Helvetica">
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-10-22 10:43:24 IP:61.63.xxx.xxx 未訂閱
引言: 加個全域變數應該行的通 但..return 1 AddCnt(n-1) AddCnt(n-2); 如果使用這個方法 會不會導致1加上AddCnt(n-1) AddCnt(n-2)的值,而不只是單純的加1而以呢
landochu你好: 加 >!
hdilwy
初階會員


發表:18
回覆:65
積分:41
註冊:2004-08-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-10-27 02:08:35 IP:219.68.xxx.xxx 未訂閱
你應該是在最底層來算次數 例如f(4)=f(3)+f(2)         =f(2)+f(1)+f(2)         =f(1)+f(0)+1+f(1)+f(0) =1+1+1+1+1 =5 這是費是數列演算法中計算次數的方法
m8815010
版主


發表:99
回覆:372
積分:289
註冊:2003-11-13

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-10-27 14:28:24 IP:61.63.xxx.xxx 未訂閱
引言: 你應該是在最底層來算次數 例如f(4)=f(3)+f(2) =f(2)+f(1)+f(2) =f(1)+f(0)+1+f(1)+f(0) =1+1+1+1+1 =5 這是費是數列演算法中計算次數的方法
hdilwy你好: 不太瞭解你說的意思是在講什麼! 總之,以你提供的原程式為準的話: < class="code"> int fib (int n) { if (n==0 || n==1) return n; else return fib(n-1) fib(n-2); } 你要非常注意到,在 fib (int n) 中,n為項數值,所以例如說求某一項的值是這樣的: 第0項 = fib(0) = 0 第1項 = fib(1) = 1 第2項 = fib(2) = 1 第3項 = fib(3) = 2 . . . 依此類推 所以說假你要求第4項的值的話,就這樣: f(4) = f(3) f(2) = f(2) f(1) f(1) f(0) = f(1) f(0) f(1) f(1) f(0) = 1 0 1 1 0 = 3 所以你說f(4)=5是不對的! 另外以上述來說呢,共用了4次的加法,因為我們必需要拆解到這一步驟才能停止: f(4) = f(1) f(0) f(1) f(1) f(0) 所以共用了4次的加法,因為總共有4個〝 〞號出現,不再多也不能少! 我的範例程式結果應該是對的(測過),也應該相當直覺的! 求 〝某一項的值是多少〞 和求 〝算某一項的值時共用了幾次加法〞是完全不相干的! 最後只要用遞迴解題的話,基本上都是會拆解到最底層的,這是遞迴的精神,只是使用 者比較感覺不到! All! 發表人 -
系統時間:2024-06-29 15:27:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!