cost 414 ms
尾调用栈 - Tail call stack

我无法理解以汇编语言实现 Tail 调用所需的堆栈操作。 当我们对 function 进行 Tail 调用时,我们基本上想用被调用的 function 的激活帧覆盖当前的激活帧。 我无法理解完成激活帧切换所需的过程。 RSP 如何更改以便位于正确的地址以及如何保持原始调用 function 的 R ...

有没有办法优化 Scala 中的尾调用? - Is there a way to optimize tail calls in Scala?

我知道 Scala 对尾递归函数(即递归调用是函数执行的最后一件事的函数)进行了优化。 我在这里要问的是是否有办法优化对不同函数的尾调用。 考虑以下Scala代码: 如果我们让它执行足够长的时间,它会产生一个堆栈溢出错误,可以通过分配更多的堆栈空间来缓解这个错误。 尽管如此,它最终会超出分配的空间 ...

如何重构 for 循环中发生的递归以使其成为尾调用? - How do I refactor a recursion occurring in a for loop to make it a tail call?

考虑递归子例程append_until_exhausted 。 递归发生在主体的中间。 我想把它放在最后进行进一步处理,也就是说一个简单的尾调用(没有任何优化,在 Perl 中通常涉及一个goto )。 除了子例程的签名和两个辅助子例程之外,您可以更改任何内容。 涉及数字的算法看起来很愚蠢,因为是 ...

Erlang,Last Call Optimization,lambda函数以及如何防止堆栈增加 - Erlang, Last Call Optimization, lambda functions, and how to prevent growing a stack

我正在编写一些Erlang代码,但遇到一种我不理解的怪异情况。 编码: 输出: 从我的理解这篇文章 ,二郎使用最后调用优化的地方,如果过去的事情的功能确实是调用另一个函数,该BeamVM反而会跳程序计数器的新功能的开始,而不是推一个新堆的帧。 这是否意味着在上述模式中,我 ...

尾递归[C] - Tail recursion [C]

我的书中的问题是“哪些递归调用(不是函数!)是尾递归的?” 在这个例子中,我猜测第一个是尾递归,但第二个不是。 但是,在下面的情况下会发生什么,我们在递归调用之前和之后还有printf() )? 考虑到我目前对尾递归的了解,我的猜测是第一个不是,但第二个和第三个是? 我错了, ...

如何在列表中间插入,尾部调用友好但不会影响性能? - how to insert in the middle of a list, being tail-call friendly but without hurting performance?

所以我有这个功能似乎是非尾巴呼叫友好的,对吧? 然后我试着弄清楚如何使用累加器,这样函数完成的最后一件事就是调用自己,我想出了这个: 但是,据我所知,List.concat的使用会使这个功能的效率降低,对吧? 那么我该如何正确地进行这种转换呢? ...

为什么我的尾部调用函数不暂停并刷新输出? - Why does my tail calling function not pause and flush output?

我已经浏览了lua用户的“睡眠功能”参考,以期找到一个解决睡眠问题的非繁忙等待解决方案,但我对其中的任何一个都不满意。 尽管如此,我还是尝试使用多个函数在使用尾部调用的函数结尾处提供延迟。 通常我不会使用尾部调用,但是由于lua不会为尾部调用留下任何堆栈,所以它适合我。 不幸的是, ...

每个Haskell函数都执行尾调用吗? - Does every Haskell function do tail calls?

我想知道Haskell中的每个函数都应该是尾递归的。 阶乘函数实现为非尾递归函数: 每个运算符也是一个函数,所以这等效于 但这显然是我的尾声。 我想知道如果每个调用都只是在堆上创建一个新的thunk,那么这段代码为什么会导致堆栈溢出。 我不应该堆溢出吗? ...

F#尾部调用因缺少括号而中断 - F# tail call broken by lack of parentheses

在F#团队博客文章中测试F#尾调用时,我发现几乎相同的代码具有相同的结果,但IL 不同,尽管仅括号中的代码有所不同。 下一个代码是由编译器优化的,我在IL末尾看到了br.s IL_0000 ,没有对sumSoFar调用 但是,该代码块并未由编译器优化,它在IL call bla_b ...

Java中的尾部递归优化和递归 - Tail recursion optimization and recursion in Java

我有一个关于尾部调用优化的问题,我需要知道此Java代码的行为: 这段代码是一个废话示例,但在这种情况下,我的问题是: 第一个doSomething()调用会优化吗? 第二个doSomething()调用会优化吗? if / else块是否以任何方式影响优化? ...

F#中的不可变Trie结构 - Immutable Trie structure in F#

我正在使用aho-corasick算法来尝试使用F#更好一点,我遇到了Trie实现的问题,它们都是可变的或者不能进行尾调用优化。 我可以看到的基本问题是,不可变数据结构必须“自下而上”构建,因为你不能改变他们所指向的内容,所以你的选择要么让它们变得可变,要么在你去的时候找出节点(即在施工中 ...

在引发异常时返回堆栈跟踪时,如何进行C#尾递归优化 - how is C# tail recursion optimization possible when a stack trace is returned when an exception is raised

我看到一些有关C#中缺少尾部调用优化的问题,据说这使该语言不适用于递归算法实现。 但是,这引出了一个问题,当引发异常或何时可以使用反射来检查调用栈并对其执行操作时,我们如何才能进行尾部调用优化并仍然提供合理的栈跟踪。 ...

如何识别什么是尾部递归? - How to recognize what is, and what is not tail recursion?

有时它很简单(如果自调用是最后一个语句,它是尾递归),但仍有一些案例让我感到困惑。 一位教授告诉我“如果在自我调用之后没有执行指令,那就是尾递归”。 这些例子怎么样(忽略它们没有多大意义的事实): a)这个应该是尾递归的,看看自调用是最后一个语句,并且在它之后没有任何东西可以执行。 ...


 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM