首页 新闻 会员 周边 捐助

这个递归程序运行结果怎么回事,帮看下

0
[已解决问题] 解决于 2023-12-26 10:39

public int RecTest2(int i)
{
if (i == 1)
{
return 1;
}
else
{
return RecTest(i - 2) + i;
}
}

RecTest2(5) 为什么变成11了呢,我是这样推理的

RecTest2(5) = RecTest2(3) + 5
RecTest2(3) = RecTest2(1) + 3
RecTest2(1)= 1

应该是1 + 3+ 5 等于9 啊,为什么是11呢,请帮解析

999999999999999的主页 999999999999999 | 初学一级 | 园豆:3
提问于:2023-12-25 17:38
< >
分享
最佳答案
0

在你的递归程序中,存在一个错误,函数名字不一致。在第6行的RecTest应该改成RecTest2,这样才能调用正确的递归函数。修改后的代码如下:

java
Copy code
public int RecTest2(int i)
{
if (i == 1)
{
return 1;
}
else
{
return RecTest2(i - 2) + i;
}
}
现在来看你的推理:

RecTest2(5) = RecTest2(3) + 5
RecTest2(3) = RecTest2(1) + 3
RecTest2(1) = 1
现在,我们将这些代入计算:

RecTest2(1) = 1
RecTest2(3) = 1 + 3 = 4
RecTest2(5) = 4 + 5 = 9
所以,根据你的推理,RecTest2(5) 应该等于 9,而不是 11。确保你在调用递归函数时使用了正确的函数名字。如果你的问题仍然存在,请检查你的代码调用是否正确,或者提供完整的代码以便更详细地分析。

奖励园豆:5
Technologyforgood | 大侠五级 |园豆:7541 | 2023-12-25 18:50
其他回答(2)
0

return RecTest(i - 2) + i;

是不是你少打了个2......

既然你RecTest2是i-2
那盲猜RecTest是i-1?
R2(5)=R(3)+5
R(3)=R(2)+3
R(2)=R(1)+2
R(1)=1
1+2+3+5=11
这不就通了

XZYawa | 园豆:106 (初学一级) | 2023-12-25 18:06
0

你的理解是对的

talentzemin | 园豆:775 (小虾三级) | 2023-12-26 09:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册