私はここに、私は一般的によく使用されるウェブサイトのためではありませんリンクをたどりませんので、リンクをたどるが、しませんでしたが、何が起こるかの説明です:
t = [1, [3, [4], [5]], [2]]
スタックレベル(0
)で我々呼び出し:
findPath(t, 5)
これは、と評価されます。私たちは、STA
findPath([1, [3, [4], [5]], [2]], 5)
(0
)をt[0]
にチェックしてください。リスト(<stack level>
:<current index>
)の表記でこれを表します。ここでは(0: 0
)となります。
この時点では、t[0]
はx
と等しくないので、if文のun-specified else条件に入り、forループの次の繰り返しに移ります。[0] T、再び
findPath([3, [4], [5]], 5)
:私たちは、現在のスタックレベル(0: 1
)にインデックスをインクリメントし、私たちが呼んで(0: 1
、1: 0
)の状態を、与える、別のスタックレベル(1
)を追加しますx
と等しくないので、我々は(0: 1
、1: 1
)に現在のスタックレベルでのインデックスをインクリメントして(0: 1
、1: 1
、2: 0
)をしようとする別のスタックレベルを追加し、その私たちが呼んでます:ここで
findPath([4], 5)
t[0]
がx
と等しくなく、t[1:]
が空であるため、スタックレベルからスタックレベル(1
)に戻って、中止したところから取り上げます。このレベルのカウンタを(0: 1
,1: 2
)に増やしてから、スタックレベルを追加します(0: 1
、1: 2
、2: 0
)。これにより、電話番号: findPath([5]、5)
Aha!今すぐt[0]
は最大スタックレベルでx
に等しいので、[t[0]]
を構成します。これは[5]
と評価されます。それから私たちはスタックレベルに戻り、中止したところから取り上げます。私たちは(0: 1
、1: 2
)にいました。今度はfindPathが値を返したので、最初のif条件になり、次の繰り返しに落ちることはありません。したがって、現在のスタックレベルでt[0]
を取得し、それに戻り値を追加します。これは、[5]
を[3]
に追加すると評価され、[3,5]
となります。
次に、再び(0: 1
)に戻り、プロセスを繰り返します。今度は[3,5]
〜[1]
を追加する必要がありますので、[1,3,5]
となります。
これは意味がありますか?私は絵を描くのに時間を費やしたくないので、ここで奇妙な表記をしましたが、実際にこれを理解するためには、スタックレベルを自分で描くべきです。