tail-recursion

    1热度

    2回答

    我意识到这个问题的答案可能会因不同的语言而异,而我最感兴趣的语言是C++。如果标签需要更改,因为这不能用与语言无关的方式回答,请随时取消。 是否有可能有一个函数是部分尾递归,并仍然有任何优势,尾递归会得到你? 据我所知,尾递归不是完成一个完整的函数调用,编译器会优化函数,只是将参数更改为新参数并跳转到函数的开头。 如果你有这样的功能: def example(arg): if arg =

    3热度

    1回答

    我是Ruby的新手,几天前刚开始接触这门语言。作为练习,我试图实现一个简单的快速排序 class Sort def swap(i,j) @data[i], @data[j] = @data[j], @data[i] end def quicksort(lower=0, upper = @data.length - 1) return nil if

    3热度

    2回答

    我在开发Web服务器上运行下面的递归函数时遇到问题。它会导致堆栈溢出。在调试模式下,本地运行良好。这里是我已经尝试过的东西: 确保在生成选项下启用了“生成尾呼叫”。 我跑了反汇编程序,并按照这里的说明:http://blogs.msdn.com/b/fsharpteam/archive/2011/07/08/tail-calls-in-fsharp.aspx它不会出现要使用尾递归。 我试过重写它而

    2热度

    2回答

    问题天真Ocaml的褶皱:你能解释为什么Map.make.fold设计得更像List.fold_right而不是List.fold_left,注意到这个List。 fold_right不是tail_recursive?应该有Map.make.fold_left和Map.make.fold_right? type of Map.make.fold val fold : (key -> 'a ->

    2热度

    2回答

    据我所知,尾递归函数在最后一步调用自己(如return语句),但是,函数的第一个实例不会终止,直到所有其他实例都终止,因此在达到多个实例后我们会发生堆栈溢出。鉴于递归是最后一步,有什么办法在下一个实例期间或之前终止前一个实例吗?如果一个实例的唯一目的是调用下一个实例,那么没有理由将它存放在内存中,对吧?

    25热度

    3回答

    我写了一小段代码,我相信如果尾递归被优化,它应该会成功,但是它会炸毁堆栈。我应该总结PHP不会优化尾递归吗? function sumrand($n,$sum) { if ($n== 0) { return $sum; } else { return (sumrand($n-1,$sum+rand(0,1))); } } echo

    17热度

    6回答

    考虑下面的代码: import scala.util.Random object Reverser { // Fails for big list def reverseList[A](list : List[A]) : List[A] = { list match { case Nil => list case (x :: xs) =>

    1热度

    2回答

    这是我的代码。 递归: #include <stdio.h> int Recursion(int m,int n) { if(m==0 || n==0) return 1; else return 2*Recursion(m-1,n+1); } void main() { int m,n,result; m=3;

    3热度

    2回答

    很痛,在这里问一下。它确实如此。每次我徒劳地寻找解决问题的答案时,我都会看到它。嘲弄我。 Stack Overflow。 无论如何,一些地狱般的影响使我试图解决河内的塔。我的第一个解决方案是不完整的,因为它导致了memory error如果有太多的磁盘上运行: (define hanoi (lambda (n from to other) (cond ((< n 0)

    1热度

    4回答

    作为练习,我实现了使用递归的地图功能在python如下: #map function that applies the function f on every element of list l and returns the new list def map(l,f): if l == []: return [] else: return [f(l[