簡體   English   中英

使用遞歸在Java中打印質數

[英]Printing prime numbers in Java using recursion

我用C語言編寫了一個類似的函數,與java不同,它能夠實現所需的結果。 下面是代碼,用於檢查數字是否為素數。 編譯說,我丟失了一個return語句。 要檢查素數為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個素數,此代碼的復雜性是多少?

在這種情況下:

else
    primes(x, i-1);

你什么也沒退。 但是,編譯器必須確保在所有情況下都返回某些內容。 只要返回任何遞歸方法調用返回的內容:

else
    return primes(x, i-1);

同樣,將第一種情況的條件修改為i == 1這樣它就可以正確返回素數為1

乍一看,您似乎在else語句中缺少返回值:

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

您只需要在自己的else內部return

else
    return primes(x, i-1);

那里的return將返回遞歸調用的結果,它們將沿着堆棧的方式工作。 但是,這可能會導致StackOverflowException

您可以將邏輯應用為:

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

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;
          }
     }
}
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);
    }

}
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);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM