Recursion 如何获取递归函数中的第一个值?

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 =

我想再做一次学校测验。我试图匹配我的结果是否等于数字“x”。我写了一个递归函数,我总是得到值0,而不是我用来调用函数的值(比如153)。我应该换什么

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代码并准确描述问题之前,我们无法有效地帮助您。