这是我对一个问题的回答,其中我应该将迭代方法转换为递归方法。老师告诉我,我不能使用a-=1
作为参数......所以他们给了我0
分。
当我运行它时,它应该工作,因为它应该是..
有人能告诉我为什么会出错吗?
public int do(int a){
if(a==0){
return 1 ;
}else{
return a * do(a-=1);
}
}
答案 0 :(得分:4)
您的代码的问题在于您正在读取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);
}
}
只需将减法结果作为参数传递,不要同时重新分配变量。
答案 1 :(得分:1)
我认为这是在java?
我看到这个片段存在两个大问题。
do
是保留关键字。它可能会导致编译错误,因此您应该为其他方法命名。-=
似乎非常含糊不清。否定运算符会在乘以a
之前或之后运行吗?更明确的运算符只是-
运算符,它将完成相同的结果。也就是说,这样的事情可能就是老师所寻求的:
public int calculateSomething(int a) {
if (a == 0) {
return 1;
} else {
return a * calculateSomething(a - 1);
}
}