我正在为我的代码寻求帮助。我想知道在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);
}
}
答案 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]