2017-01-29 9 views
1

私は最近、ユーザ入力のint配列が昇順に並べられているかどうかをチェックするプログラムの作成を終了しました。私はここで私の機能isAscを持っています:java-recursion code explanation(昇順でチェックする)

public static boolean isAsc(int[] arr, int index){ 
    if (index==1 || arr.length==1){ 
     return true; //Base case 
    } 
    else if (arr[index-2] >= arr[index-1]){ 
     return false; 
    } 
    else 
     return isAsc(arr, index-1); //recursive step 
} 

論理は正しいようです。しかし、私は関数を呼び出すときに私が得ることはありません:System.out.print(isAsc(arr, arrayLength-1));

出力が間違っています。このSystem.out.print(isAsc(arr, arrayLength)); は正解を返します。どうして?ありがとう!

+2

表示される出力は何ですか?あなたが使った配列は何ですか? – Malvolio

+0

正確に(隣接して)ソートされているにもかかわらず、重複した数字があると、ロジックはfalseを返します。 '> ='を '>'に変更してください。 – Bohemian

+0

@Malvolio 1 2 4 3それは真を返す。とにかく、私はそれを今すぐ分かった –

答えて

3

あなたは

isAsc(arr, arr.length-1) 

あなたの方法でメソッドを呼び出す場合は、決してif (arr[index-2] >= arr[index-1])チェックで配列の最後の要素をチェックしないので、出力が正しくない可能性があります。あなたの方法をチェックしif (arr[index-2] >= arr[index-1])の最初の実行

isAsc(arr, arr.length) 

でそれを呼び出す一方

、つまりif (arr[arr.length-2] >= arr[arr.length-1])(あなたの配列は、複数の要素を持っていると仮定した場合)に、そのarr[arr.length-1]はスキップされていません。

+0

オハイ、私は今それを得た。私は理解するためにペンと紙ですべてを書かなければなりませんでした。どうもありがとうございました! –

+0

私はindex-1> = indexを代わりに使うべきでした。私はarr.length-1を宣言するのに慣れています。再度、感謝します –