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

时间:2016-12-22 09:35:39

标签: 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 % 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;

    }
}

1 个答案:

答案 0 :(得分:0)

您提供了不完整的信息,没有方法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
>