tail-recursion

    0熱度

    1回答

    我想構建一個尾遞歸過程出我已經構建的另一個過程。但我並沒有完全意識到我應該如何思考。我給你兩個例子,其中第一個是我的程序,它不是尾遞歸,第二個是我的「嘗試」做一個尾遞歸過程。是啊...嘗試:)我會很高興的如何構建尾遞歸程序的任何建議,我應該如何開始,思考和什麼。 編輯:第一個完全按照我想要的。 (define square (lambda (x) (* x x))) (do-to-each squ

    1熱度

    1回答

    下面的邏輯標識整數相加來Ñ產生最大產物的組合: def bestProd(n: Int) = { type AType = (Vector[Int], Long) import annotation._ // @tailrec (umm .. nope ..) def bestProd0(n: Int, accum : AType): AType = {

    7熱度

    2回答

    我正在通過Coursera課程(progfun)學習Scala。 我們正在學習如何在功能上進行思考,並在可能的情況下使用尾遞歸來實現函數/方法。 而且就一個列表功能的foreach一個例子,我們教實現它,如: def foreach[T](list: List[T], f: [T] => Unit) { if (!list.isEmpty) foreach(list.tail) else

    2熱度

    2回答

    由於一些特殊的原因,我想刪除大程序中所有@tailrec的效果,但不想手動執行,編譯時是否有任何可選參數可以關閉尾遞歸優化?我只想將@tailrec留在代碼中,但不想在編譯時檢查它並做尾遞歸優化。那可能嗎?

    1熱度

    1回答

    我自己從scala編譯器源代碼構建一個scala編譯器。在編譯器的源代碼中,有許多尾遞歸函數/方法。從其源代碼構建scala編譯器還需要編譯編譯器本身的源代碼。如果我添加的選項-g:notailcalls編譯源代碼時關閉尾遞歸優化,運行內置的編譯器時,會出現一個statck溢出錯誤。 總而言之,是否有可能在一個大型且複雜的scala程序中有很多遞歸調用時,在編譯時可能會導致運行時出現堆棧溢出錯誤,

    -2熱度

    1回答

    根據wikipedia Corecursion - 綜合工作,從基礎案例開始並構建起來,迭代地生成進一步從基礎案例中刪除的數據。 功能組合器是否做共同遞歸? 像 list.map(...).filter(..) 使用Scala任何corecursion的例子嗎? BR!

    2熱度

    4回答

    我有一個錯誤在我試圖添加到列表中數字序列遞歸。例如。如果輸入是[5,3,9],我[5 + 1,3 + 2,9 + 3]和輸出[6,5,12]。我想這樣做遞歸,所以我做的方式正在經歷並加入一個爲下面的列表中的小部分: def add_position_recur(lst, number_from=0): length = len(lst) # base case if

    2熱度

    1回答

    在實現工會發現,我通常會用這樣的路徑壓縮寫find功能: def find(x): if x != par[x]: par[x] = find(par[x]) return par[x] 這是很容易記住,可以說是方便閱讀。這也是有多少書籍和網站描述算法。 但是,天真編譯,這將使用堆棧內存線性在輸入大小。在許多默認會導致堆棧溢出的語言和系統中。 我知道寫find唯

    0熱度

    1回答

    我最近了解到尾遞歸。 據我所知,許多編程語言編譯器在發現遞歸方法爲「尾遞歸」時執行[當前java不],代碼優化。 我對TR的理解: 編譯器,在調用返回後沒有進一步的操作時,不會創建新的堆棧幀(取代舊的調用的堆棧幀)。 下面的代碼[即使在java]尾部遞歸? 假設totalSeriesLenght = 10 public void generateFibonacciSeries(int totalS

    -3熱度

    5回答

    函數的遞歸調用(或歸納步驟)是什麼,該函數返回的整數數量從1到N,它們均勻分割N.這個想法是將一個純遞歸代碼python這個函數。沒有'for'或'while'循環,兩個模塊都不能使用。功能num_of_divisors(42)返回圖8,表示​​1,2,3,6,7,14,21,和42的42