これはスタックオーバーフローの問題について人々が尋ねている問題の逆ですが、関数を作成して次のように呼び出すとエラーは起こりません。アプリケーションは単にコアを分割します私のCPUの私はそれを強制終了するまで:F#で無限再帰がスタックオーバーフロー例外に当たっていないのはなぜですか?
let rec recursionTest (x: uint64) =
recursionTest (x + 1UL)
recursionTest 0UL
この方法で私は時々私のコードにブレークポイントを置くことができます:それは実際にこのような何かをして
もちろんlet rec recursionTest x =
recursionTest x
recursionTest 1
私はこれを変更することができますxの値がかなり速く上がっているのを見ても、それでも文句はありません。 F#は無限回帰に気を付けませんか?
ありがとう、それはVSが呼び出しスタックウィンドウでより多くの呼び出しを表示していなかった理由についての記載されていない質問についても説明しました。 – Amazingant
実際、この場合、F#コンパイラは実際にコードをループに変換します。コンパイルされたコードには実際には再帰はありません。 –