将for循环转换为素数的递归方法

时间:2016-02-26 20:48:18

标签: java

我需要将下面的代码转换为递归方法,而不使用全局变量并且只使用一个参数。我搜索了主题已经没有带有一个参数的代码并且不使用全局变量。

public boolean isPrime(int x){
 for(int i=2;i<x;i++)
  if(x%i==0) return false ;
 return true; 
}

3 个答案:

答案 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