我在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个素数,这段代码的复杂性是什么。
答案 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);
}
}