我需要將下面的代碼轉換爲遞歸方法,而不使用全局變量並只使用一個參數.I搜索已存在的主題沒有一個參數代碼,並且不使用全局變量。將一個for循環轉換爲質數的遞歸方法
public boolean isPrime(int x){
for(int i=2;i<x;i++)
if(x%i==0) return false ;
return true;
}
我需要將下面的代碼轉換爲遞歸方法,而不使用全局變量並只使用一個參數.I搜索已存在的主題沒有一個參數代碼,並且不使用全局變量。將一個for循環轉換爲質數的遞歸方法
public boolean isPrime(int x){
for(int i=2;i<x;i++)
if(x%i==0) return false ;
return true;
}
我的一個同學,使榮譽這個網站(計算器)話題accually這裏收到的解決方案是,如果你有興趣了相當輝煌 https://stackoverflow.com/questions/35660562/finding-prime-numbers-recursively-with-using-only-one-parameter?noredirect=1#comment59001671_35660562
這是一個有趣的問題。 如果你可以使用的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);
}
}
好,爲你的要求:
,並根據:
它拿出我的大學考試之一
有幾個方面的考慮:
解決方案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
你不能做到這一點。你將需要一個更多的參數。壞問題。 –
你想通過做這個遞歸來完成什麼?這可能會更容易幫助你。特別是由於給定的方法似乎執行其工作正常,因爲 –
我知道它是一個愚蠢的問題,但它出現在我的大學考試之一 – KennyMD