3 回答

TA貢獻1820條經驗 獲得超9個贊
這是一個 類似于 斐波那契數列 的數列
當 n <= 2 時,foo(n) = n
當 n > 2 時,foo(n) = foo(n - 1) + foo(n - 2)
所以:
foo(1) = 1;
foo(2) = 2;;
foo(3) = foo(2) + foo(1) = 3;
foo(4) = foo(3) + foo(2) = 5;
foo(5) = foo(4) + foo(3) = 8;
后面的以此類推

TA貢獻1827條經驗 獲得超4個贊
這個答案是選C的。
遞歸都是完全可以轉化為數學里面的數列來做的,他們都是有一定規律的。
你仔細看看,就會發現foo(n)= foo(n-1)+f(n-2)。
而當n=1的時候,foo(1)=1
當n=2的時候,foo(2)=2
所以很容易就推出:
foo(3)=foo(2)+foo(1)=2+1=3
foo(4)=foo(3)+foo(2)=3+2=5
foo(5)=foo(4)+foo(3)=5+3=8
所以答案選擇C。

TA貢獻1856條經驗 獲得超17個贊
說下我的理解吧
首先這個題目最下面 return foo(n-1)+f(n-2); 后面的這個f()方法應該是印錯了;
正確的題目應為:當n=5時,下列函數的返回值是:
int foo(int n){
if(n <= 2)
return n:
return foo(n-1)+foo(n-2);
}
先說下 這個foo()方法大致的意思吧:
傳入初始數據 n=5;
往下走 判斷 n是否大于等于2 ;
結果5大于等于2 跳出 if方法;
繼續走下面的方法 foo(5-1)+foo(5-2);
得出 foo(4)+foo(3);
那我們怎么知道 方法foo(4)+foo(3)等于多少呢?
那就繼續把參數傳進方法計算出結果看看不就知道了嗎?!
先計算 foo(3) :
傳入初始數據 n=3;
往下走 判斷 n是否大于等于2 ;
結果3大于等于2 跳出 if方法;
得出 foo(2)+foo(1);
那么還是沒計算出結果! 繼續!
計算 foo(2):
傳入初始數據 n=2;
往下走 判斷 n是否大于等于2 ;
結果2等于2 執行 if方法;
得出 foo(2) 的 結果為 2;
可以得出 :
當 n <= 2 時,foo(n) = n
當 n > 2 時,重新執行方法foo(n) = foo(n - 1) + foo(n - 2)
foo(3)=foo(2) + foo(1)= 3;
foo(4)= foo(3) + foo(2)= 5;
foo(5)= foo(4)+ foo(3)= 8;
添加回答
舉報