我做过很多谷歌搜索,但无法找到正确的答案。当我运行下面的代码时,我总是输出"即使输入是像13和#34;这样的素数,也不是素数。 请帮帮我。
import java.util.Scanner;
public class PrimeRecurssion {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
int number = sc.nextInt();
System.out.println("Your given number is:" + prime(number,2));
}
public static String prime(int x,int temp )
{
if(x%temp == 0)
{
return("not a prime");
}
if(x != temp-1)
{
return prime(x,temp+1);
}
else
return("prime");
}
}
答案 0 :(得分:1)
试
if(x - 1 != temp)
{
return prime(x,temp+1);
}
或
if(x != temp + 1)
{
return prime(x,temp+1);
}
您将x
与temp - 1
例如。 x = 13, temp = 12
导致13 != 12-1
的内容prime(13, 13)
=>因此调用"no prime"
,其返回{{1}}
答案 1 :(得分:0)
尝试更改
if(x != temp-1)
到
if(x != temp+1)
它不会治愈你所有的错误,但可能会修复它。
答案 2 :(得分:0)
public static String prime(int x,int temp )
{
if(x == 1)
{
return "prime";
}
if(x != temp)
{
if(x%temp == 0)
{
return("not a prime");
}
else
{
return prime(x,temp+1);
}
}
else
return("prime");
}
这是有效的,因为如果你已经达到数字本身,你只想返回素数,否则你会在那之前达到非素数。查看代码,看看你是否能弄清楚发生了什么。