假設我有一個類型爲int - > int的遞歸函數f(x)。 預期越大的x越多,遞歸調用f(x)將執行。在F#中找到堆棧'轉折點'
給定一個遞增順序的無限序列的整數,我對序列中的第一個整數感興趣,當使用f時會導致StackOverflowException。
我該怎麼做?
到目前爲止,我試過做一個簡單的函數,它只是測試在給定的整數上使用給定的函數時是否拋出了StackOverflowException。它看起來像這樣:
let overflows f x =
try
ignore (f x) in false
with
| :? System.StackOverflowException -> true
但是,它似乎無法捕捉StackOverflowException時,它拋出,儘管這是意圖。
有什麼建議嗎?
大問題 - 這取決於函數調用上面有多少個堆棧幀。你爲什麼想知道這個? – 2013-04-21 06:46:27
我有幾個遞歸函數,我想比較一下,看看每個人如何使用堆棧。基本上,要看哪一個能夠處理最大的投入。 – phaz 2013-04-21 06:51:22
您是否可以修改遞歸函數以使用http://msdn.microsoft.com/en-us/library/system.diagnostics.stacktrace.aspx返回堆棧跟蹤? – 2013-04-21 06:54:35