【发布时间】:2019-08-13 18:44:35
【问题描述】:
我写了一个算法,递归地计算给定数字的平方和,如果和最终等于 1,我希望它返回 true。
我验证了我计算的总和是正确的,如果给定的数字是 19,下一个将是 82,然后是 68,最后是 100,这应该返回 true。
我检查了程序是否进入了if(sum==1),它确实存在。
如果我在return false; 之前打印总和,它会奇怪地以降序(1、68、82)打印结果总和,然后返回 false。
class Solution {
public boolean isHappy(int n) {
int sum =0;
int digit =0;
while (n>0) {
digit =n%10;
sum=sum+digit*digit;
n=n/10;
System.out.println(sum);
}
if(sum==1){
return true;
}
else{
isHappy(sum);
}
return false;
}
}
我的代码有什么问题?为什么总和为1后不停止,必须返回true?
【问题讨论】:
-
您调用
isHappy(sum);,但您忽略了它返回的内容(从而使该代码完全无用)。 -
isHappy()调用时将返回true(如果数字平方和恰好为 1)或false(否则)。在后一种情况下,它将递归调用自身,但完全没用(除了System.out.println的副作用,我只将其作为调试信息)。我不明白你的意思。