【发布时间】:2022-06-28 21:33:55
【问题描述】:
我正在学习 Java,但遇到了递归问题。我需要使用递归方法来检查一个数字是否是 Armstrong 数字。代码如下:
public class ArmstrongChecker {
public boolean isArmstrong(int number) {
// check if the number is a negative number
if (number < 0) {
return false;
}
ArmstrongChecker armstrongChecker = new ArmstrongChecker();
// find the length of the number
int length = armstrongChecker.lengthChecker(number);
// create a variable to store the sum of the digits of the number
int sum = 0;
// find the individual digits and raise to the power of the numbers of digits
if (number != 0) {
int digit = Math.floorMod(number, 10);
int powerRaised = (int) Math.pow(digit, length);
sum = sum + powerRaised;
isArmstrong(number / 10);
}
return sum == number;
}
// method to check the length of the number
public int lengthChecker(int number) {
int length = String.valueOf(number).length();
return length;
}
}
如何防止 isArmstrong 方法中的 int length 改变其值
【问题讨论】:
-
怎么改?每个级别的递归都有自己的
length值。 -
如果你不想改变这个值,不要在方法内部调用它。另外,我和 akarnokd 在一起。
-
您忽略了递归调用
isArmstrong()的结果。并且没有必要生成ArmstrongChecker的新实例。