2016-02-26 100 views
-6

我需要將下面的代碼轉換爲遞歸方法,而不使用全局變量並只使用一個參數.I搜索已存在的主題沒有一個參數代碼,並且不使用全局變量。將一個for循環轉換爲質數的遞歸方法

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

你不能做到這一點。你將需要一個更多的參數。壞問題。 –

+1

你想通過做這個遞歸來完成什麼?這可能會更容易幫助你。特別是由於給定的方法似乎執行其工作正常,因爲 –

+0

我知道它是一個愚蠢的問題,但它出現在我的大學考試之一 – KennyMD

回答

0

這是一個有趣的問題。 如果你可以使用的Java 8,你可以遵循解決問題(注意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); 
    } 

} 
0

好,爲你的要求:

  • 不使用全局變量。
  • 僅使用一個參數。

,並根據:

它拿出我的大學考試之一

有幾個方面的考慮:

  • 如果您通過一個類的實例您只傳遞一個變量,並且作爲Clas SES可以有多個變量內...
  • 他們沒有說明是否可以在裏面調用多個功能,所以,再次,這是你能做什麼提示或線索。所以,你們兩個解決方案:

解決方案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); 
} 

同樣,這個解決方案是基於許多考試需要一點點創造力,也許這是這種情況的目的。

這種情況下,不應該在生產中使用,但它們和 修剪着甜蜜的 java.lang.StackOverflowError