本書的第9章Expert F#3.0顯示瞭如何在遍歷二叉樹時避免堆棧溢出時使用continuation-passing樣式。我編寫了與本書代碼幾乎相同的樹遍歷代碼,但是我仍然遇到堆棧溢出問題。我的代碼如下: type 'a Tree =
| Leaf of 'a
| Branch of 'a Tree * 'a Tree
let rec mkLeftLeaningTree
我是still試圖實現2-3根手指樹,我取得了很好的進展(repository)。在做一些基準測試時,我發現當樹很大時,我的基本toList結果爲StackOverflowException。起初,我看到一個簡單的修復,並使其成爲尾遞歸。 不幸的是,事實證明,toList是不是罪魁禍首,但viewr是: /// Return both the right-most element and the
我需要做一個函數來計算平均值,並且返回大於平均值的值的數目。例如,傳遞{4,5,12,17}的數組應該返回2(因爲12和17比平均值9.5大)。到目前爲止,我已經寫了函數來返回平均值,但是我怎樣才能讓它計數大於平均值的數字並保持它的尾遞歸? int TAvg(int* a, int size, int acc=0, int num=0){ //acc is the sum so far, num
我測試了在Scala中尾遞歸優化的性能。所以我在eclipse和sbt中測試它。但是,我只得到尾遞歸版本比正常情況更差的結果。我不知道它的原因。 這是我的代碼。 package MyList
sealed trait List[+A]
case object Nil extends List[Nothing]
case class Cons[+A](head: A, tail: List[
我一次又一次地使用switch語句。每當我經常發現自己想在我的函數中使用return語句。我想知道用這種方式編寫的switch語句是否仍然是tail-call優化的。 function misc(x) {
switch(true){
case x > 1:
return misc(x-1);
break;
default: