用Java计算数字的除数

时间:2014-02-15 16:07:13

标签: java recursion

我正在为我的代码寻求帮助。我想知道在Java中使用递归的数字的所有除数,但我的程序只计算1或2个除数,而不是所有除数。这是我的代码:

import java.io.*;

public class Ejercicio {
    static void Divisor(int num, int presuntoDivisor){
        if (num%presuntoDivisor == 0) {
            System.out.println("un divisor es "+ presuntoDivisor);
            presuntoDivisor++;
            Divisor(num, presuntoDivisor);
        }
    }

    public static void main(String[] args) throws NumberFormatException, IOException {
        int num, presunto=1;
        BufferedReader linea = new BufferedReader(new InputStreamReader(System.in));
        System.out.print("introduce un numero: ");
        num = Integer.parseInt(linea.readLine());
        Divisor(num, presunto);
    }
}

6 个答案:

答案 0 :(得分:0)

试试这个

import java.util.Scanner;

public class Ejercicio{
    public static void main(String args[]){
        Scanner x=new Scanner(System.in);
        System.out.print("Enter the number :  ");
        long y=x.nextInt(),i;

        System.out.print("Divisors of "+y+" = 1 , ");

        for( i=2;i<y;i++){
            long z=y%i;
            if (z == 0) {
                System.out.print(i + ", ");
            }
        }

        System.out.println(y);
    }
}

答案 1 :(得分:0)

您的递归调用进入if()条件。通过正确放置}来调整此项。

此外,要限制从运行代码到永久,请在方法的乞讨时使用以下阻止条件。

if(num / 2 < presuntoDivisor){
    return;
}

答案 2 :(得分:0)

在处理递归函数时,您需要指定一个终端条件。在这种情况下,我建议你在presuntoDivisor大于数字/ 2时返回控件。 此外,您需要检查所有可能的数字。现在,代码仅在余数等于0时运行。

以下功能应该有效。

public class Ejercicio {
static void Divisor(int num, int presuntoDivisor){
        if(num%presuntoDivisor == 0)
            System.out.println("un divisor es "+ presuntoDivisor);
        presuntoDivisor++;
        if (presuntoDivisor > num / 2)
            return;
        Divisor(num, presuntoDivisor);

}

答案 3 :(得分:0)

试试这个,

import java.io.*;

public class Ejercicio {
        static void Divisor(int num, int presuntoDivisor){
                if(presuntoDivisor < num){
                    if (num%presuntoDivisor == 0){
                        System.out.println("un divisor es "+ presuntoDivisor);
                    }
                    Divisor(num, ++presuntoDivisor);
                }
        }

        public static void main(String[] args) throws NumberFormatException, IOException
        {
            int num, presunto=1;
            BufferedReader linea = new BufferedReader(new InputStreamReader(System.in));
            System.out.print("introduce un numero: ");
            num= Integer.parseInt(linea.readLine());
            Divisor(num, presunto);
        }
}

答案 4 :(得分:0)

试试这个 -

import java.io.*;

public class Ejercicio {
    private static void divisor(int num, int presuntoDivisor){
        if(num % presuntoDivisor == 0) 
            System.out.println("un divisor es "+ presuntoDivisor);

        if(presuntoDivisor == num) return;

        divisor(num, ++presuntoDivisor);
    }

    public static void main(String[] args) throws NumberFormatException, IOException {
        int num, presunto=1;

        BufferedReader linea = new BufferedReader(new InputStreamReader(System.in));

        System.out.print("introduce un numero: ");

        num = Integer.parseInt(linea.readLine());
        divisor(num, presunto);
    }
}

输出:

introduce un numero: 100
un divisor es 1
un divisor es 2
un divisor es 4
un divisor es 5
un divisor es 10
un divisor es 20
un divisor es 25
un divisor es 50
un divisor es 100

答案 5 :(得分:0)

这将递归返回直到给定n的所有除数的列表:

public static List<Integer> allDivisors(int n){
    return divHelper(n, 1, new ArrayList<>());
}

private static List<Integer> divHelper(int n, int i, ArrayList<Integer> res) {
    if (n < 1 || i > n) return res;
    if (n % i == 0) {
        res.add(i);
    }
    return divHelper(n, i+1, res);
}
  

System.out.println(allDivisors(12));

     

[1、2、3、4、6、12]

     

System.out.println(allDivisors(7)); //素数

     

[1,7]

     

System.out.println(allDivisors(1));

     

[1]