[英]Why is my return statement not working in this recursive function?
我有一個數組,它只用升序整數預先排序:
int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9 };
我希望我的程序在我稱之為“gesucht”的數組中搜索 integer 並返回數組中“gesucht”所在的位置。
我可能不使用任何循環、包或類似.find 方法的東西,而必須使用遞歸
這是我的程序:
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition){
if((0<=startposition && startposition<=endposition && endposition<=array.length) == false){
throw new IllegalArgumentException("wrong input");
}
int m = (endposition-startposition)/2;
if (gesucht == array[m]){
return m;
}
if (array[m]<gesucht){
optimierteSuche(gesucht, array, m+1, endposition);
} else {
optimierteSuche(gesucht, array,startposition, m-1);
}
}
當我在我的主要方法中使用以下內容時:
int[] intArray = new int[]{ 1,2,3,4,5,6,7,8,9 };
System.out.println(optimierteSuche(2,intArray,0,intArray.length));
我的編譯器告訴我,我的方法缺少一個 return 語句,雖然它在那里,當我使用我的算法並自己計算步驟時它可以工作(或者至少我會說它可以)
我已經嘗試對其進行一些調整,但它也不起作用:
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition){
if((0<=startposition && startposition<=endposition && endposition<=array.length) == false){
throw new IllegalArgumentException("wrong input");
}
int m = (endposition-startposition)/2;
int ergebnis = 0;
if (gesucht == array[m]){
ergebnis = m;
}
if (array[m]<gesucht){
optimierteSuche(gesucht, array, m+1, endposition);
} else {
optimierteSuche(gesucht, array,startposition, m-1);
}
return ergebnis;
}
由於興趣,我學習經濟學並參加了一些編程課程,但因此與許多其他編程專業的聯系並不多,並且希望得到一些幫助。 謝謝!
tgdevies 是正確的,歸功於他們,但因為評論並不總是表達需要發生的事情......
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition) {
if ((0 <= startposition && startposition <= endposition && endposition <= array.length) == false) {
throw new IllegalArgumentException("wrong input");
}
int m = (endposition - startposition) / 2;
if (gesucht == array[m]) {
return m;
}
if (array[m] < gesucht) {
return optimierteSuche(gesucht, array, m + 1, endposition);
}
return optimierteSuche(gesucht, array, startposition, m - 1);
}
我認為您想將 ergebnis 設置為等於您對 optimierteSuche 的兩次調用的返回值,並修復中間 position 的計算,並再添加一個“else”,使其看起來像這樣:
public static int optimierteSuche(int gesucht, int[] array, int startposition, int endposition){
if((0<=startposition && startposition<=endposition && endposition<=array.length) == false){
throw new IllegalArgumentException("wrong input");
}
int m = startposition + ((endposition-startposition)/2);
int ergebnis = 0;
if (gesucht == array[m]){
ergebnis = m;
}
else
if (array[m]<gesucht){
ergebnis=optimierteSuche(gesucht, array, m+1, endposition);
} else {
ergebnis=optimierteSuche(gesucht, array,startposition, m-1);
}
return ergebnis;
}
你快到了!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.