【问题标题】:Check if a number is prime using recursion使用递归检查数字是否为素数
【发布时间】:2018-12-02 11:33:21
【问题描述】:

如果这是一个素数,这是一个递归检查——它是否正确?

public static boolean isPrimeRecursive (int n,int i){//i eqoual to n
    if (n <= 1) {  
       return false;  
    }if (i==1){
        return false;
    }if(n%i==0){
        return false;
    }

   return isPrimeRecursive(n,i--);
}

【问题讨论】:

    标签: recursion primes


    【解决方案1】:

    我不会用那个神秘的第二个参数给你的用户带来负担,而是提出一种只使用一个参数的不同方法,首先处理小于 2 的数字和偶数,然后使用适当的参数调用你的递归方法:

    private static boolean isPrimeRecursive(int n, int i) {
    
        if (i * i > n) {
            return true;
        }
    
        if (n % i == 0) {
            return false;
        }
    
        return isPrimeRecursive(n, i + 2);
    }
    
    public static boolean isPrime(int n) {
    
        if (n <= 2 || n % 2 == 0) {
            return (n == 2);
        }
    
        return isPrimeRecursive(n, 3);
    }
    
    public static void main(String[] args) {
    
        System.out.println(isPrime(Integer.parseInt(args[0])));
    }
    

    【讨论】:

      【解决方案2】:

      使用您的代码,您应该以 n-1 的值开始 i,因为 n % n 始终适用于素数。

      那么在你的条件下(if (i == 1) { ... },应该返回 true,因为如果方法到达1,那么它满足所有其他条件。

      最后在你的return语句return isPrimeRecursive(n, i++);中,最好使用++i,因为i++会在函数执行后增加i的值。

      public static boolean isPrimeRecursive (int n,int i){
          if (n <= 1) {  
             return false;  
          }
      
          if (i == 1) {
              return true;
          }
      
          if(n % i == 0){
              return false;
          }
      
         return isPrimeRecursive(n, --i);
      }
      

      在您的主要功能中,您将使用:

      int n = 17;
      
      System.out.println(isPrimeRecursive(n, n-1);
      

      另一种方法是始终以 2 的值开始 i 并增加它的值。从那里开始。

      public static boolean isPrimeRecursive (int n, int i) {
          if (n <= 2) {  
             return (n == 2) ? true : false;  
          }
      
          if (i >= n) {
              return true;
          }
      
          if (n % i == 0) {
              return false;
          }
      
          return isPrimeRecursive(n, ++i);
      }
      

      那你就简单做吧:

      int n = 17;
      
      System.out.println(isPrimeRecursive(n, 2);
      

      【讨论】:

        猜你喜欢
        • 2020-11-14
        • 2021-11-19
        • 2019-03-15
        • 2020-05-04
        • 2013-03-22
        • 2021-04-15
        • 2021-12-31
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多