2017-07-15 60 views
0

问题在下面。 main()通过调用isPrime()来检查数字1-10。我认为我的数学是正确的,但是除了2之外的每个数字都会回归为不是总数。使用递归方法识别素数[java]

我检查了一些关于SO的解决方案和问题,但是,我似乎无法达到相同的结果。

原来的问题:

public class PrimeChecker { 
// Returns 0 if value is not prime, 1 if value is prime 
    public static int isPrime(int testVal, int divVal) { 
     // Base case 1: 0 and 1 are not prime, testVal is not prime 

     // Base case 2: testVal only divisible by 1, testVal is prime 

     // Recursive Case 
     // Check if testVal can be evenly divided by divVal 
     // Hint: use the % operator 

     // If not, recursive call to isPrime with testVal and (divVal - 1) 
     return 0; 
    } 

    public static void main(String[] args) { 
     int primeCheckVal = 0; // Value checked for prime 

     // Check primes for values 1 to 10 
     for (primeCheckVal = 1; primeCheckVal <= 10; ++primeCheckVal) { 
     if (isPrime(primeCheckVal, (primeCheckVal - 1)) == 1) { 
      System.out.println(primeCheckVal + " is prime."); 
     } 
     else { 
      System.out.println(primeCheckVal + " is not prime."); 
     } 
     } 
    } 
} 

我的解决方案至今:

 public class PrimeChecker { 
    // Returns 0 if value is not prime, 1 if value is prime 
    public static int isPrime(int testVal, int divVal) { 
     int resultVal = 0; 

     if ((testVal == 0) || (testVal == 1)){ 
     resultVal = 0; 
     }// Base case 1: 0 and 1 are not prime, testVal is not prime 

     else if (divVal == 1) { 
     resultVal = 1; 
     }// Base case 2: testVal only divisible by 1, testVal is prime 

     else { 
     if((testVal % divVal != 0) && (testVal/divVal == 1)) { 
      isPrime(testVal, (divVal-1)); 
     } 
     else {    
      resultVal = 1; 

     } 
     } 
     return resultVal; 
     } 

     public static void main(String[] args) { 
     int primeCheckVal = 0; // Value checked for prime 

     // Check primes for values 1 to 10 
     for (primeCheckVal = 1; primeCheckVal <= 10; ++primeCheckVal) { 
     if (isPrime(primeCheckVal, (primeCheckVal - 1)) == 1) { 
      System.out.println(primeCheckVal + " is prime."); 
     } 
     else { 
      System.out.println(primeCheckVal + " is not prime."); 
     } 
     } 
    } 
} 
+1

重复的https://stackoverflow.com/questions/34113314/recursive-method-for-prime-numbers-in-java?rq=1 –

+0

@IvanPronin不是真的; OP只是要求我们找到他们的错字。 – GKFX

回答

1

更改的if/else块

 if((testVal % divVal != 0) && (testVal/divVal == 1)) { 
     isPrime(testVal, (divVal-1)); 
    } 
    else {    
     resultVal = 1; 

    } 

if (testVal % divVal != 0) { 
    return isPrime(testVal, (divVal-1)); 
} else {    
    resultVal = 0; 
} 

基本上,你忘记了返回递归的结果,所以代码继续返回错误的东西。如果testVal % divVal == 0,该数字是非素数,所以你返回零。另外,不要使用仅取0或1的整数;使用boolean

+1

那么,不止是一个错字? :) –

+0

好的,谢谢你,这个伎俩。所以基本上我需要返回一个调用方法,直到它除以1.谢谢。 – CGSteve78

+0

@ CGSteve78如果这个答案对您有帮助,请点击旁边的绿色勾号接受它。谢谢! – GKFX