为了账号安全,请及时绑定邮箱和手机立即绑定

关于程序设计if的问题,具体情况如下所示~

关于程序设计if的问题,具体情况如下所示~

慕森王 2021-12-31 07:03:33
A.5B7C8D10原题如下:当N=5时,下列函数的返回值是:int foo(int n){if(n <= 2)return n:return foo(n-1)+f(n-2);}
查看完整描述

3 回答

?
慕妹3146593

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;
后面的以此类推

 


查看完整回答
反对 回复 2022-01-04
?
GCT1015

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。


查看完整回答
反对 回复 2022-01-04
?
慕慕森

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;



查看完整回答
反对 回复 2022-01-04
  • 3 回答
  • 0 关注
  • 183 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信