如何計算費氏數列運算加法的次數呢 |
尚未結案
|
landochu
一般會員 發表:23 回覆:20 積分:8 註冊:2003-12-24 發送簡訊給我 |
|
pkdemon
初階會員 發表:2 回覆:51 積分:25 註冊:2004-09-13 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 請問各位大大 如何使用遞迴寫出費氏數列運算加法的次數呢 例: 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 發送簡訊給我 |
加個全域變數應該行的通 但..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 發送簡訊給我 |
|
hdilwy
初階會員 發表:18 回覆:65 積分:41 註冊:2004-08-31 發送簡訊給我 |
|
m8815010
版主 發表:99 回覆:372 積分:289 註冊:2003-11-13 發送簡訊給我 |
引言: 你應該是在最底層來算次數 例如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! 發表人 - |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |