簡體   English   中英

為什么我的 return 語句在這個遞歸 function 中不起作用?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM