2016-07-09 17 views
0

私はGolangを学習しています。再帰関数の出力の背後にある論理を理解しようとしています。ここでアルゴリズム:再帰関数を理解する

は私のプログラムは次のとおりです。

package main 

import(
    "fmt" 
) 

func rec(i int) (int){ 
    if i == 5{ 
     fmt.Println("Break", i) 
     return i 
    } 

    rec(i+1) 
    fmt.Println("i = ", i) 

    return i 
} 

func main(){ 
    j := 0 
    j = rec(1) 

    fmt.Println("Value j = ", j) 

} 

出力:

Break 5 
i = 4 
i = 3 
i = 2 
i = 1 
Value j = 1 

は、私の質問は以下のとおりです。

第一出力(ブレーク5)は出力の最上位にあるのはなぜ?私の関数の最後の出力は印刷されませんか?

そして、なぜメイン機能で

j = rec(1) 

リターン1と条件のリターンを無視?

if i == 5{ 
     fmt.Println("Break", i) 
     return i // Here normally the return will be: return 5 ?? 
    } 

PS:私はあなたの答えをありがとう

のUbuntu 14.04の下に移動し、バージョンgo1.2.1にlinux/386を使用しています。 func rec(i int)機能お使いの場合は条件が5が最初に印刷されている理由である、トリガー、およびそれが連続してコールスタックを通じてダウンした後、私には5に到達するまで、

rec(i+1) // recurse at the i+1 value 
fmt.Println("i = ", i) 

再帰的に反復における

答えて

3

この行は、 、印刷4、次に3 ...など。

これは質問です再帰、具体的には行かない。あなたが理解するのを助ける多くのリソースがあります。ここにはTowers of Hanoi problemの再帰の説明があります。

+1

@ nexus66あなたの関数が再帰的に5、4、3などを返すので、最初にj変数が5に等しかったので、ヒットするまで4、3、...に上書きされます1を印刷します。 – ifma

+0

ありがとう!私は後ろに論理を持っています。 –