haskell-jp / beginners #18 at 2021-11-17 11:50:05 +0900
Back to beginners #18
葉酸you3
2021-11-17 11:50:05 +0900
再帰関数って再起しすぎると関数のスタックがオーバーフローしたりしないのでしょうか
igrep
2021-11-17 11:54:46 +0900
一言で言うとします。(Haskell固有の詳しい回答はちゃんと説明できる自信がないので他の人にお願いしたい....)
fumieval
2021-11-17 12:54:20 +0900
f n = if n == 0 then 0 else f (n - 1) + 1
このような関数は、`+ 1` を計算するためにスタックを消費するのでスタックオーバーフローします。`f n = if n == 0 then 0 else f (n - 1)`` の場合はその必要がないのでオーバーフローを避けられます(末尾再帰)
葉酸you3
2021-11-17 13:42:44 +0900
なるほど、戻ってくる必要がないような再帰関数ならスタックを消費しないってことですね
Back to beginners #18