使用递归方法获取因子

时间:2016-07-10 17:20:04

标签: java recursion factors

输出是正确的,但它会不时地在因子的末尾显示-1(无限循环)。我知道递归方法中的while循环有问题,但我不知道它是什么。在得到最终答案后如何停止递归调用?我应该使用什么而不是while循环?

public static void main() {
    int num;
    System.out.print("\fInput:");
    num = kb.nextInt();
    int temp = 1;
    factors(num, temp);
}

public static void factors(int num, int temp) {
    int count = 2;

    while (temp != num) {
        if ((num % count) == 0) {
            System.out.print(count + " * ");
            factors(num / count, temp * count);
        } else
            count++;
    }
}

4 个答案:

答案 0 :(得分:1)

首先,你不需要在这里递归。如果您使用递归,即使您已经检查了更大的值,也始终会使用count = 2开始新的。

所以,而不是

factors(num/count, temp*count);

我会用

num = num/count;

其次,正如阿提拉已经说过的那样,你不需要temp参数,你需要的真正检查是num != 1是否为真。

如果你真的想要使用递归,那么会有更好的方法:将方法factors传递给计数器,这样你就不必总是从2开始。在这种情况下,你不要&# 39;不需要任何循环:

public static void main()
{
    int num;
    System.out.print("\fInput:");
    num=kb.nextInt();
    int count=2;
    factors(num, count);

}



public static void factors(int num, int count)
{  
    if (num == 1)
        return;

    if((num%count)==0)
    {
        System.out.print(count+ " * ");
        factors(num/count, count);
    }
    else 
        factors(num,count+1);
    }
}

答案 1 :(得分:0)

你的停止条件(temp!= num)永远不会是假的。 当你得到最终因素并且想要停止时,你会调用因子(1,"原始数字"),因此while循环将继续。

你应该尝试:

{{1}}

不需要temp参数。

答案 2 :(得分:0)

正如其他人指出的那样,while (temp!=num)永远不会是false,程序将继续无休止地循环。 Karl_Costa的解决方案运行良好,但是,您仍然可以使用while循环进行计数,如图所示。正如其他人所指出的,没有必要使用temp

这是另一个有效的解决方案 -

public static void main() {
    int num;
    System.out.print("\fInput:");
    num=kb.nextInt();
    System.out.print("1");  // To always print 1 as a factor.
    factors(num, 2);
}

public static void factors(int num, int count) {
    while(num%count != 0 && num>count) {
        count++;
    }
    System.out.print(" * " + count);
    if(num==count) {
        return;
    }
    if(num%count==0)
        factors(num/count, count);
    else {
        factors(num/count, count+1);
    }
}

答案 3 :(得分:-1)

class RecursiveFactors
{
    static void factors(int a, int n)
    {
        if(n%a == 0)
        {
            System.out.println(a);
        }    

        if(a<=n)
            factors(a+1, n);
    }    

    public static void main(String args[])
    {
        factors(1,25);
    }
}