Javaの再帰的なペンの質問

Javaのペンの質問の練習は、再発話題がそれに時間の始まりについてでした、そして、私が知りたい質問にパラメータスタックで会った今日、

public class test1 {

    public static void main(String[] args) {
        split(12);
    }

    public static int split(int number) {
        if (number > 1) {
            if (number % 2 != 0) System.out.print(split((number + 1) / 2));
            System.out.print(split(number / 2));
        }
        return number;
    }
}

問題は後に進んだ、スタックの順番でスタックに調査する方法である
時に、実行のスタック方法は、return文で、知識があります。それは、スタックと消費方法の終わりを意味しているので何もreturn文がない場合は何も実行されていない場合、そのメソッドスタックが直接破壊されました。
1.スプリット(12)、System.out.printのコード(分割(個/ 2))の実行を行う
スタックに分割(12/2)を、この時間数= 6;
2.実行スプリット(6)、実行中のコードSystem.out.print(スプリット(数/ 2))の
、スタックに分割(6/2)、この時間数= 3
(3)は3分割を行う
。1
2
。3
!行1であれば(数%2 = 0)、
第二列System.out.print(スプリット((数+ 1 )/ 2));
線3 System.out.print(スプリット(数/ 2) );
実行順序
第二列実行する
最初の分割((3 + 1)/ 2)スタックに、この時間数= 2は、
この時間数= 1、スタックに(2/2)分割次いで、スプリット(2)を実行し、最後に1を返し、
ノートこの時点で第二その行が終了しない
この時間に
スタック出力で分割(2/2)、1;
スプリット((+ 1.3)/ 2)スタック出力2において、
第2ラインの端、3行目を実行し、この時間数= 3、System.out.print(スプリット(数/ 2))の実行
スタックに分割(3/2)、番号= 1、リターン、次いで必要スタック
スタック出力で分割(3/2)、1。
分割(6/2)スタック出力における3。
束のうち分割(12/2)、出力6;
最終結果12136。

スタックの分割出力(n)のうちのn個になるように分割(数)メソッドは、この数の最終値を返します

仕上げ:
(12/2)スプリットをスタックに
スタックに分割(6/2)

スプリット((3 + 1)/ 2) スタックに
スタックに分割(2/2)
スタック出力で分割(2/2)。1つの
スプリット((3 + 1)/ 2) スタック出力2で

スタックに分割(2/2)
スタック出力で分割(2/2)1

スタック出力で分割(6/2)、3
分割(12/2)スタックのうち、出力6

出版元の記事 ウォンの賞賛1 ビュー46

おすすめ

転載: blog.csdn.net/qq_41600383/article/details/104074778