2

私はこの機能をいじっていました:

public class x {

public static void main(String[] args) {
recurse(10);
}

public static int recurse(int theNumber) {

    if(theNumber == 0) {
        return 0;
    }

    else
    {
        System.out.println(theNumber);
        theNumber--;
        recurse(theNumber);
        System.out.println(theNumber);
    }

    return -1;
}
}

そして、私はこの出力を得ました:

10 9 8 7 6 5 4 3 2 1 0 1 2 3 4 5 6 7 8 9 続行するには、任意のキーを押します。. .

これはどのように可能ですか?10 から 0 までのカウントダウンがどこから来ているかは理解できますが、いったいどうやってカウントアップするのでしょうか?? 再帰に関する基本的な概念が欠けていることは確かです。誰か空欄を埋めてくれませんか??

4

7 に答える 7

6

これはSystem.out.println(theNumber);、メソッドの最後のためです。メソッドを再帰的に呼び出し、メソッドのアップコン完了後、それらの値を出力しています。

于 2013-04-02T07:04:06.387 に答える
2

簡潔にするためrecurse(2)に、メインプログラムを呼び出すとしましょう。次に、次のようになります。

theNumber= 2 プリント 2、デクリメント、コールrecurse(1)

--> theNumber= 1、1 を出力、減分、呼び出しrecurse(0)

----> theNumber= 0、印刷せずに戻る

--> theNumber= 1 は 0 (1 から減分) を出力し、戻ります

theNumber= 2 は 1 を出力 (2 から減少)、戻ります

于 2013-04-02T07:13:01.453 に答える
1

これはあなたが必要とするものです-

public static int recurse(int theNumber) {

    System.out.println(theNumber);
    if (theNumber > 0) {
        theNumber--;
        recurse(theNumber);
    }

    return 0;
}
于 2013-04-02T07:12:19.660 に答える
0

Habibが言ったように、フローは再帰に入り、再帰関数の実行が完了すると、最後の System.out.println(theNumber) が呼び出されます。

---->  public static int recurse(int theNumber) {
|   
|       if(theNumber == 0) {
|           return 0;
|       }
|   
|       else
|       {
|           System.out.println(theNumber);
|           theNumber--;
----------< recurse(theNumber);
            System.out.println(theNumber);
        }

        return -1;
    }

したがって、関数が再帰から戻るとき、theNumber には 1 だけ減分された値が含まれます。

于 2013-04-02T07:12:11.927 に答える