如何解决静态变量在Java的递归调用中如何表现?
我正在使用递归方法来计算并跟踪结果,我正在使用全局静态变量来存储结果。虽然,我的代码是不正确的,因为考虑基本情况。根据我的代码,power(2,3)应该返回4。如果我使用空运行方法进行检查。但是实际上, ans 变量的值在整个执行过程中仅更改一次。我的问题是,为什么ans的值不被更新,并且对于任何幂n和以2为底的值,我的答案总是作为基值本身返回。谁能调试我的代码并帮助我了解递归方法调用中的全局静态变量的行为
public class Solution {
static int ans=1;
public static int power(int x,int n) {
/* Your class should be named Solution
* Don't write main().
* Don't read input,it is passed as function argument.
* Return output and don't print it.
* Taking input and printing output is handled automatically.
*/
if(n==0)
return 1;
if(n==1)
return x;
else
ans=ans*power(x,n-1);
return ans;
}
}
解决方法
由于评估顺序,该代码无法正常工作。
说您叫power(3,4)
。
ans = 1
power(3,4):
ans=ans*power(x,n-1) -> 1*power(3,4-1)
power(3,3):
ans=ans*power(x,3-1)
power(3,2):
ans=ans*power(x,2-1)
power(3,1):
return 3
ans=1*power(3,2-1) =1*3 =3
return ans -> return 3
ans=1*power(3,3-1) =1*3 =3
return ans -> return 3
ans=1*power(3,4-1) =1*3 =3
return ans -> return 3
Result is:
ans = 3
return 3
这是因为,当您编写ans=ans*power(x,n-1)
时,将在调用ans
方法之前评估power()
的值。
现在,如果您改为编写ans=power(x,n-1)*ans
,则代码将像这样流动:
ans = 1
power(3,4):
ans=power(x,n-1)*ans -> power(3,3):
ans=power(x,2):
ans=power(x,1):
return 3
ans=power(3,2-1)*ans =3*1 =3
return ans -> return 3
ans=power(3,3-1)*ans =3*3 =9
return ans -> return 9
ans=power(3,4-1)*ans =9*9 =81
return ans -> return 81
Result is:
ans = 81
return 81
这也是错误的。
基本上,除了在递归过程中不会更改的值(或可能用于结果收集器的值)外,不应在递归方法中使用字段。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。