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;
添加回答
举报