【C語言教學手冊(四版)-練習題解答】
第8章
8.5 區域、全域與靜態變數
27. 試撰寫一程式,用來比較計算 fib(n) 函數時,遞迴版本和 for 迴圈版本執行 fib() 的總 次數(關於 fib() 函數的定義,請參考 8.4 節)。n 值取 1~30,執行結果應如下所示:
n= 1, for 迴圈 1 次, 遞迴 1 次
n= 2, for 迴圈 1 次, 遞迴 1 次
n= 3, for 迴圈 3 次, 遞迴 3 次
n= 4, for 迴圈 4 次, 遞迴 5 次
...
n=30, for 迴圈 30 次, 遞迴 1664079 次
#include <stdio.h>
void count_r(), count_for();
int fib(int), rfib(int);
int cnt1,cnt2;
int main()
{
int i;
for(i=1;i<=30;i++)
{
cnt1=0;
cnt2=0;
fib(i);
printf("n=%d, for 迴圈%d 次, ",i,cnt1);
rfib(i);
printf("遞迴%d 次\n",cnt2);
}
}
void count_for()
{
cnt1++;
}
void count_r()
{
cnt2++;
}
int fib(int n)
{
int i,fn;
int fn_1=1,fn_2=1;
for(i=1;i<=n;i++)
{
count_for();
f(n==1 || n==2)
return 1;
else
{
fn=fn_1+fn_2;
fn_2=fn_1;
fn_1=fn;
}
}
return fn;
}
int rfib(int n)
{
count_r();
if(n==1 || n==2)
return 1;
else
return rfib(n-1)+rfib(n-2);
}
(不好意思小宣傳一下我的繪圖 希望大家喜歡)
\\♥
謝謝大家:))
希望大家支持我會繼續努力
ps
p新的貼圖終於出來了💜💜💜
海苔貓繪圖作品\\
希望大家支持~~
留言列表