尾遞迴不是偽遞迴啊喂!

2021-10-01 02:51:32 字數 578 閱讀 2234

正常遞迴:

func formalrecursion(n int) int

if n==1

return n*formalrecursion(n-1)

}尾遞迴:

var a int = 1

func tailrecursion(n int,a int) int

if n==1

return tailrecursion(n-1,n* a)

} ```

只可惜。。。golang的編譯器對尾遞迴並沒有優化。。。

那麼golang這樣寫尾遞迴:

// 這個是有進行優化的。因為recursionchannel函式執行完畢後,直接就銷毀了,沒有接著保留堆疊

func recursionchannel(n int, a int, result chan int)

if n == 1

go recursionchannel(n-1, a, result) // 無需等待返回

}

遞迴 尾遞迴

階乘函式 n n n 1 n 2 3 2 1 針對這樣的表述,直譯成乙個過程 define factorial n if n 1 1 n factorial n 1 如果是factorial 6 其計算行為是 factorial 6 6 factorial 5 6 5 factorial 4 6 5...

遞迴 尾遞迴

計算n的階乘 function add n return n function add n 1 斐波那契數列 1 1 2 3 5 8 13.function arr n else 如上例項,但是遞迴有乙個很大的問題,就是在不斷地呼叫自身函式時,每一次呼叫都會存新的資料變數等,如果有成百上千次呼叫,則...

遞迴與尾遞迴

1 遞迴 關於遞迴的概念,我們都不陌生。簡單的來說遞迴就是乙個函式直接或間接地呼叫自身,是為直接或間接遞迴。一般來說,遞迴需要有邊界條件 遞迴前進段和遞迴返回段。當邊界條件不滿足時,遞迴前進 當邊界條件滿足時,遞迴返回。用遞迴需要注意以下兩點 1 遞迴就是在過程或函式裡呼叫自身。2 在使用遞迴策略時...