tail-recursion

    0熱度

    1回答

    所以我試圖創建一個函數,它接受一個單詞列表並返回新列表中的字母。這是我到目前爲止: quicksort :: Ord a => [a] -> [a] quicksort [] = [] quicksort (p:xs) = (quicksort lesser) ++ [p] ++ (quicksort greater) where lesser = filter (<

    0熱度

    3回答

    我有一個關於斯卡拉尾遞歸的問題。我寫了一個簡單的尾遞歸代碼,它接受一個列表並創建一個新的偶數列表。但由於scala無法將元素附加到列表中,我的列表按降序排列。下面是代碼 def listCreator(lists: List[Int]): List[Int] = { @tailrec def evenListCreator(lists: List[Int], accum: Li

    2熱度

    1回答

    我試着用這個教程youtube tutorial。我有一個函數如下: fun fact(x:Int):Int{ tailrec fun factTail(y:Int, z:Int):Int{ return if(y == 0) { z } else { factTail(y - 1, y * z) } }

    7熱度

    2回答

    我嘗試瞭解編程中的良好實踐,並堅持這個問題。我知道在Java中,遞歸函數可能是'屁股疼痛'(有時),我儘可能實現該函數的尾部版本。這是值得一提的,或者我應該以舊式的方式做? 有(在科特林)這兩種功能之間的任何差別: tailrec fun tail_fibonacci(n : BigInteger, fib1 : BigInteger = BigInteger.ZERO , fib2 : BigI

    0熱度

    1回答

    它應該是遞歸的基本問題。 簡單代碼: func fact(n int) int { if n == 0 { return 1 } return n * fact(n-1) } 怎麼行n * fact(n-1)將由通用編程語言引擎蓋下進行處理,C++,Java的,去... 在我的理解行n * fact(n-1)將創建表達式就像 n * n-1 * n-

    4熱度

    1回答

    這是展平二叉查找樹的一種方法。它的問題是當它構建的大函數最終應用於[]時,堆棧溢出。我想知道是否有合理的方法修復這段代碼片段而不完全改變它的工作方式。例如,如果構建一個自定義作曲家來構建一個函數樹,然後使用一個顯式堆棧來評估它們(因爲問題已經是將一棵樹展平了),那麼這將無濟於事。 let flatten_k t = let rec f t (k:(list<'a>->list<'a>)

    0熱度

    1回答

    我在搜索ES6中的IsInTailPosition()函數的最終用戶文檔時沒有運氣。 language reference解釋了算法,但沒有提供關於如何使用此功能的敘述。這是一個有趣的功能,因爲它涉及到尾部呼叫優化(如果我理解正確的話)。有人可以解釋一下如何使用這個功能,理想情況下是一個例子。

    1熱度

    2回答

    爲了練習目的,我一直試圖以功能方式實現一對Scala的List方法,其中之一是partition。假設以下特徵: def partition[T](l: List[T], f: T => Boolean): (List[T], List[T]) 它返回一個包含兩個列表的元組 - 第一個包含了所有從l那些符合通過謂語f,另一個包含所有其他元素的元素。 我想出了下面的遞歸解決方案,它是不幸的是沒有

    1熱度

    1回答

    在必要的編碼風格的常見循環模式是遵循對象鏈查找結束時,例如: private ThreadGroup rootOf(ThreadGroup leaf) { ThreadGroup rootGroup = leaf; ThreadGroup parentGroup; while ((parentGroup = rootGroup.getParent()) != null

    1熱度

    3回答

    以下是引發編譯錯誤的最小代碼:「不在尾部位置的遞歸調用」。但是,我使用的是@inline,而遞歸調用是處於尾部位置。我使用這個@inline的原因是我有兩次重複的原始reccall的代碼。 import scala.annotation._ object Test { @tailrec private def test(i: Int): Int = { @inline def