使用递归在Java中打印素数

时间:2014-07-22 16:38:58

标签: java recursion primes

我在C中编写了一个类似的函数,并且能够实现与java不同的所需结果。 下面是代码,它检查数字是否是递归的素数。 汇编说,我错过了一份退货声明。 如果素数是x,则要检查的数字。变量i是除数。(即)x / 2,(x / 2)-1,... 0。

public int primes(int x, int i)
{
    if(i==0)
        return 1;
    if(x%i==0)
        return 0;
    else
        primes(x, i-1);
}

如果我必须打印前1000个素数,这段代码的复杂性是什么。

7 个答案:

答案 0 :(得分:6)

在这种情况下:

else
    primes(x, i-1);

你没有归还任何东西。但是,编译器必须确保在所有情况下都返回一些内容。只需返回递归方法调用返回的内容:

else
    return primes(x, i-1);

另外,将第一个案例的条件修改为i == 1,以便正确地在素数上返回1

答案 1 :(得分:1)

乍一看,您似乎错过了其他声明中的回复:

public int primes(int x, int i)
{
    if(i==1)
        return 1;
    if(x%i==0)
        return 0;
    else
        return primes(x, i-1);
}

编辑:另外,正如rgettman的回答所说,第一个条件if(i==0)中存在逻辑错误。它应该是if(i==1)。使用上面的编辑测试代码后,这是我的结果:

List of primes under 100: 
2
3
5
7
11
13
17
19
23
29
31
37
41
43
47
53
59
61
67
71
73
79
83
89
97

答案 2 :(得分:0)

您只需return内的else

else
    return primes(x, i-1);

return将返回递归调用的结果,并且它们将在堆栈中向上运行。但是,这可能导致StackOverflowException s。

答案 3 :(得分:0)

您可以将逻辑应用为:

for (i = 1; i <= 100; i++) {              
    int counter=0;    
    for (num = i; num>=1; num--) {
        if (i%num==0) {
            counter = counter + 1;
        }
    }
    if (counter == 2) {
        //Appended the Prime number to the String
        primeNumbers = primeNumbers + i + " ";
    }   
}

然后显示primeNumbers

答案 4 :(得分:0)

import java.util.Scanner;

public class Primenumm {
     public static void main(String[] args) {
          System.out.println("Enter the Number :-");
          Scanner s = new Scanner(System.in);
          int limit = s.nextInt();
          for (int i = limit; i >= 1; i--) {
               if (primes(i, i - 1) == 1) {
                    System.out.println(i + " is a prime no");
               } else {
                    System.out.println(i + " is not a prime no");
               }
          }
     }

     private static int primes(int x, int i) {
          if (i == 1) {
               return 1;
          }
          try {
               if (x % i == 0) {
                    return 0;
               } else {
                    return primes(x, i - 1);
               }
          } catch (Exception e) {
               return 1;
          }
     }
}

答案 5 :(得分:-1)

public class PrintPrime {

    public static void main(String args[]) {
        for (int i = 2; i < 1000; i++) {
            primes(i, Math.ceil(Math.sqrt(i)));

        }
    }

    public static int primes(int x, double i) {
        if (i == 1)
            System.out.println(x);
        if (x % i == 0)
            return 0;
        else
            return primes(x, i - 1);
    }

}

答案 6 :(得分:-1)

import java.util.Scanner;
public class Primenumm {

static int limit,flag;

public static void main(String[] args) {
    // TODO Auto-generated method stub

    System.out.println("Enter the Number :-");
    Scanner s=new Scanner(System.in);
    limit=s.nextInt();
    int i=0,j=limit;
    printNum(i,j);
}

private static int  printNum(int i, int j) {
    // TODO Auto-generated method stub

    if(j==0){
        return 1;
    }
    if(i%j==0){
        return  0;
    }
    else{

        return  printNum(i,j-1);
    }
}