参数错误的递归方法

托尔加·塔默(Tolga Tamer)

这是我对一个问题的答案,在该问题中,我应该将迭代方法转换为递归方法。老师告诉我我不能使用它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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章