这是我对一个问题的答案,在该问题中,我应该将迭代方法转换为递归方法。老师告诉我我不能使用它a-=1
作为参数...所以他们给了我0
分数。.当我运行它时,它按预期的方式运行..有人可以告诉我为什么它错了吗?
public int do(int a){
if(a==0){
return 1 ;
}else{
return a * do(a-=1);
}
}
您的代码的问题在于,您正在读取同一表达式中的值a
并使用来重新分配它a -= 1
,但是未指定这些操作的顺序。该声明:
return a * do(a -= 1);
可以实现为:
temp = a;
a -= 1;
return temp * do(a);
可以满足您的期望,或者:
a -= 1;
return a * do(a);
它将乘以递减后的值,a
而不是原始值。
编写函数的正确方法是:
public int do(int a){
if(a==0){
return 1 ;
}else{
return a * do(a-1);
}
}
只需将减法的结果作为参数传递,不要同时重新分配变量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句