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)
再帰的に反復における
@ nexus66あなたの関数が再帰的に5、4、3などを返すので、最初にj変数が5に等しかったので、ヒットするまで4、3、...に上書きされます1を印刷します。 – ifma
ありがとう!私は後ろに論理を持っています。 –