tail-recursion

    2熱度

    1回答

    我正在基於C++中的自定義數據結構list_t的項目工作。 這裏是預定義的函數,它可以幫助我操作這個list_t,並且我被要求寫入的函數被稱爲insert_list(list_t,list_t,int)是尾遞歸的。 typedef Recursive_list list_t; // EFFECTS: returns true if list is empty, false otherwise

    0熱度

    2回答

    我遇到了SBCL(在Linux上)可能與尾遞歸有關的問題(不是我完全相信那是什麼)。我這次添加了代碼(它看起來很長,但那是因爲我把它全部展開了)。 這筆交易是我有一個比較兩個結構的函數'compare-pstructs'。但是,這些結構可能具有與組件相同結構的列表。自然,這需要一個遞歸解決方案。 當上述函數需要比較這些pstructs的列表時,會調用第二個函數'compare-parses'。自然

    3熱度

    1回答

    此功能應該是尾部呼叫優化。 據我所知,現在的瀏覽器(Chrome瀏覽器,甚至試圖在加那利)應優化這些事我得到一個錯誤,這個運行: function die(x, s) { return x === 0 ? s : die(x-1, s+1); } die(100000, 0); 錯誤: VM369:1 Uncaught RangeError: Maximum call stack

    1熱度

    4回答

    我想一個函數f適用於List的每個元素,並在第一個錯誤不會停止,但是隻能扔過去的錯誤(如果有的話): @annotation.tailrec def tryAll[A](xs: List[A])(f: A => Unit): Unit = { xs match { case x :: xt => try { f(x) } finally {

    2熱度

    2回答

    我想這個遞歸函數轉換成尾遞歸函數 def sumOfFractions(n: Int): Double = { require(n > 0, "Parameter n has to be greater than 0"); if (n==1) 1.0 else 1.0/n + sumOfFractions(n - 1) } 我認爲,這個解決方

    3熱度

    2回答

    我有一個遞歸函數,我想做尾遞歸。我的實際問題更復雜並且與上下文有關。但我想解決的問題是用這個簡單的程序來演示的: #include <iostream> struct obj { int n; operator int&() { return n; } }; int tail(obj n) { return tail(obj{ n + 1 > 1000

    0熱度

    1回答

    我試圖從https://github.com/lspector/gp/blob/master/src/gp/evolvefn_zip.clj 重寫這段代碼使用易復發: (defn random-code [depth] (if (or (zero? depth) (zero? (rand-int 2))) (random-terminal) (let [

    7熱度

    1回答

    我想找到一個二叉樹的尾遞歸摺疊函數。鑑於以下定義: // From the book "Functional Programming in Scala", page 45 sealed trait Tree[+A] case class Leaf[A](value: A) extends Tree[A] case class Branch[A](left: Tree[A], right: T

    2熱度

    1回答

    我下面的答案here的建議,並已證實:tailcall_optimization =>真實:trace_instruction =>假的,但我仍然得到: SystemStackError: stack level too deep ... ... 8696 levels... 我在做什麼錯? def persist_shipments_then_next(prev_data) persi

    2熱度

    1回答

    我被分配了funct()並被告知將其轉換爲尾遞歸,所以我做了funct2()。我使用另一個堆棧溢出thread開始,它有用,但它始終是一個值。 我認爲問題是由於ÿ值爲0最初,和去其他功能的部分時,減去從而不是等同於初始值x。但我不確定。 #include <iostream> #include <stdio.h> using namespace std; int funct(int x);