Recursion 如何获取递归函数中的第一个值?
我想再做一次学校测验。我试图匹配我的结果是否等于数字“x”。我写了一个递归函数,我总是得到值0,而不是我用来调用函数的值(比如153)。我应该换什么Recursion 如何获取递归函数中的第一个值?,recursion,Recursion,我想再做一次学校测验。我试图匹配我的结果是否等于数字“x”。我写了一个递归函数,我总是得到值0,而不是我用来调用函数的值(比如153)。我应该换什么 public static boolean isArmstrong(int x, Armstrong s) { while (a != true) { while (x != 0) { int number = x / 10; int remain =
public static boolean isArmstrong(int x, Armstrong s) {
while (a != true) {
while (x != 0) {
int number = x / 10;
int remain = x % 10;
s.push(remain);
return isArmstrong(number, s);
}
a = true;
}
if (getResult() == x) {
System.out.println("True , result is : " + getResult());
} else {
System.out.println("False , x is : " + x + " result is : " + getResult());
//x always prints out 0 which ends the while loop.But i need to get the x value when i call the function
}
return true;
}
}
您提供了不完整的信息,没有为方法
getResult()
或类型Armstrong s
定义,但我们仍然可以解决一些问题。首先,您的布尔方法isArmstrong()
从不返回false
,只返回true
,因此我们不能期望它检测非阿姆斯特朗数。第二,你在递归方法中做的太多了,包括对阿姆斯特朗数的测试和结果的公布——这些最好由不同的方法来处理
下面是一个将isArmstrong()
从布尔方法更改为以整数形式返回其计算的返工。输入值为零会中断递归,导致返回结果。我们使用一个单独的函数将isArmstrong()
的参数与返回值进行比较,以宣布成功或失败:
public class Armstrong
{
public static int isArmstrong(int x, int power) {
if (x != 0) {
int quotient = x / 10;
int remainder = x % 10;
return (int)Math.pow(remainder, power) + isArmstrong(quotient, power);
}
return 0;
}
public static void main(String args[]) {
int number = 0, power = 0;
if (args.length > 0) {
try {
power = args[0].length();
number = Integer.parseInt(args[0]);
} catch (NumberFormatException e) {
System.err.println("Argument " + args[0] + " must be an integer.");
System.exit(1);
}
}
int result = isArmstrong(number, power);
if (result == number) {
System.out.println("True, result is: " + result);
} else {
System.out.println("False, number is: " + number + " but result is: " + result);
}
}
}
输出
> java Armstrong 153
True, result is: 153
> java Armstrong 123
False, number is: 123 but result is: 36
> java Armstrong 1634
True, result is: 1634
> java Armstrong 1635
False, number is: 1635 but result is: 2003
>
欢迎来到StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于这里。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。