我需要将下面的代码转换为递归方法,而不使用全局变量并且只使用一个参数。我搜索了主题已经没有带有一个参数的代码并且不使用全局变量。
public boolean isPrime(int x){
for(int i=2;i<x;i++)
if(x%i==0) return false ;
return true;
}
答案 0 :(得分:0)
这是一个有趣的问题。
如果您可以使用 java 8 ,则可以按照以下方式解决问题(请注意,需要使用其他if条件检查案例isPrime(2)
):
package test;
import java.util.function.Function;
public class Test {
public static void main(String[] args) {
System.out.println(isPrime(13));
}
private static Function<Integer, Boolean> fun;
public static boolean isPrime(int x) {
fun = i -> {
if (i > 2) return (x%i != 0) && fun.apply(i-1);
else return (x%i != 0);
};
return fun.apply(x-1);
}
}
答案 1 :(得分:0)
好的,至于你的要求:
并且基于:
它出现在我的一次大学考试中
需要考虑几个方面:
解决方案1(使用类)
class RecursVar {
int x;
int i = 2;
RecursVar(int x) {
this.x = x;
}
}
public boolean isPrimeRecurs(int x){
return isPrime(new RecursVar(x));
}
boolean isPrime(RecursVar recursVar) {
if(recursVar.x % recursVar.i == 0)
return false;
if (++recursVar.i >= recursVar.x)
return true;
return isPrime(recursVar);
}
解决方案2(不使用类的清洁方法,但基于只有一个参数的函数是
isPrime
)
boolean isPrime(int x) {
return checkForPrime(x, 2);
}
boolean checkForPrime(int x, int i) {
if (i >= x) return true;
if (x % i == 0) return false;
return checkForPrime(x, ++i);
}
同样,这个解决方案是基于许多考试需要一点创造力,也许这就是本案的目的。
这种情况不应该用于生产,它们慢和 修剪这个网站( StackOverFlow )的荣誉
java.lang.StackOverflowError
答案 2 :(得分:0)
我的一个同学&#39;主题准确地在这里收到一个解决方案,如果你感兴趣它的相当辉煌 https://stackoverflow.com/questions/35660562/finding-prime-numbers-recursively-with-using-only-one-parameter?noredirect=1#comment59001671_35660562