我相信这段代码至少会返回一个true,也许它会返回更多的错误,所以函数将在n = 15的递归结束时返回它是如何工作的我知道如何跟踪递归方法但是它使用AND或OR返回结果
public static boolean PrimeRec(int n){
if (n==1)
return true;
else
return PrimeRec(n,n-1);
}
public static boolean PrimeRec(int n,int d){
if(d==1)
return true;
else if(n%d==0)
return false;
else
return PrimeRec(n,d-1);
}
答案 0 :(得分:2)
这只是一种检查数字是否为素数的非常低效的方法,附加的错误是根据此函数1是素数。它是递归的一个坏例子,就像你通常不应该递归地计算斐波那契序列一样。
因此,对于所有n> = 2,PrimeRec(n)将告诉您n是否为素数。
要修复算法,请更改
if (n==1)
return true;
到
if (n < 2)
return false;
答案 1 :(得分:1)
如果您想查看&#34;工作原理&#34;,请尝试将第二个PrimeRec
更改为此。它与你的帖子做同样的事情,但有一些额外的输出,我希望能帮助你理解。
public static boolean PrimeRec(int n,int d){
System.out.println("PrimeRec called with n=" + n + " d=" + d);
if(d==1) {
System.out.println("d=1, returning true");
return true;
}
else if(n%d==0) {
System.out.println("d divides n, returning false");
return false;
}
else {
System.out.println("calling PrimeRec recursively");
boolean answer = PrimeRec(n,d-1);
System.out.println("back from recursive PrimeRec, returning " + answer);
return answer;
}
}
答案 2 :(得分:0)
它取任何数字.. chk如果它是1则返回true否则应用递减数量递减1 ant chk如果它除了那个递减数字,直到数字减少到1。