[英]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.