tail-recursion

    6热度

    1回答

    在我开始之前:YES,这是来自大学的作业。在我被告知我是懒惰和邪恶的之前:作业的这一部分是转换我们已有的两个功能,这一个是第六个。 (define (flatten-list a-list) (cond ((null? a-list) '()) ((list? (car a-list)) (append (flatten-list (car a-list)) (f

    4热度

    3回答

    我有一个F#函数,它返回跳转n的模式中从0开始的数字列表,选择n,跳过n,选择n ...直到限制。例如,输入2的这个函数将返回[2, 3, 6, 7, 10, 11...]。 最初我实现此作为如下面的非尾递归函数: let rec indicesForStep start blockSize maxSize = match start with | i when i > max

    3热度

    2回答

    给定字母表["a"; "b"; "c"]我想将所有长度为25的序列转储到文件。 (字母可以重复的序列;它不是一个置换)的问题是,我得到一个Stack overflow during evaluation (looping recursion?)当我尝试使用下面的代码: let addAlphabetToPrefix alphabet prefix = List.map (function

    5热度

    2回答

    erlang中的尾递归比前向递归更适合性能? 或者erlang编译器也优化了前向递归吗? 我的意思是,是否有任何理由使用尾递归而不是前向递归? 在我看来,前向递归看起来更漂亮。

    1热度

    1回答

    我正在做一个家庭作业任务,由2部分组成。 第一个是编写一个Prolog程序,检查某对X,Y是否属于http://en.wikipedia.org/wiki/Triangular_number。例如:(2,3)= true; (4,10)=真实等等。 第一解决方案使用“普通”递归,我已经解决了这个这样的: triangle(0, 0). triangle(X, Y) :- X > 0, Y > 0

    5热度

    3回答

    是否可以实现快速排序算法的尾部递归版本(通过延续模式)?如果是这样,那么如何实现呢? 标准(未优化)版本: let rec quicksort list = match list with | [] -> [] | element::[] -> [element] | pivot::rest -> let ``elements smaller than pivot``, ``element

    6热度

    4回答

    我需要打印的打印有效标记“<”的不同的变化和“>”给定的标签应该出现和下面的次数是使用递归在python该溶液中。 def genBrackets(c): def genBracketsHelper(r,l,currentString): if l > r or r == -1 or l == -1: return if r == l and r =

    2热度

    2回答

    如果我用一个非常高的初始currentReflection值调用这个函数,我会得到一个堆栈溢出异常,这表明函数不是尾递归的(正确的?)。我的理解是,只要递归调用是该函数的最终计算,那么它应该作为重复使用当前栈帧的尾递归函数进行编译器优化。任何人都知道为什么这里不是这种情况? let rec traceColorAt intersection ray currentReflection =

    12热度

    1回答

    我最近学会了Haskell,并试图在可能的情况下将纯粹的功能风格转到我的其他代码。其中一个重要方面是将所有变量视为不可变的,即常量。为了做到这一点,许多使用循环以命令式执行的计算必须使用递归来执行,这通常会由于为每个函数调用分配一个新的栈帧而导致内存损失。但是,在尾部调用(即被调用函数的返回值立即返回给被调用者的调用者)的特殊情况下,该惩罚可以被称为尾部调用优化的过程绕过(在一种方法中,这可以通过

    7热度

    2回答

    退房这个斯卡拉代码: def rec(n: Int) { if (n > 1) { val d = n/2 rec(d) // if (d > 1) // abort loop rec(n/d) } } 该代码将导致死循环。由于尾递归优化,我没有得到一个StackOverflowError。 用JAD反编译,我得到这个Java的代码: p