tail-recursion 相关问题

尾递归是一种递归策略,其中函数执行一些工作,然后调用自身。 “尾部”指的是递归位于函数的最后。许多 - 特别是功能 - 编程语言编译器可以将这些类型的调用转换为迭代,这意味着可以使用受支持语言中的尾递归而不必担心堆栈溢出,无论调用的数量如何。

Groovy 的尾递归

我编写了 3 个阶乘算法: 我预计会因堆栈溢出而失败。没问题。 我尝试尾递归调用,并将之前的算法从递归转换为迭代。这不起作用,但我...

回答 2 投票 0

Java 中的尾调用优化

从 Java 8 开始,Java 不提供尾部调用优化 (TCO)。 经过研究,我了解到原因是: 在 JDK 类中 [...] 有许多安全敏感方法...

回答 3 投票 0

这会是尾调用吗?

我的代码中的递归调用是尾调用还是只是普通的递归? void sum(const int value[], size_t count,int* result){ 如果(计数 <= 0) return; *result += values[0]; sum(valu...

回答 1 投票 0

这是否会是尾调用?

我不明白,我的代码: void sum(const int value[], size_t count,int* result){ 如果(计数 <= 0) return; *result += values[0]; sum(values + 1,count - 1,result); } Is it a tail cal...

回答 1 投票 0

在这种情况下如何将递归修改为循环版本?

我想修改下面的c++代码,使用循环而不是递归。 我知道有两种修改方法: 学习代码并制作循环算法。在这种情况下我认为代码的意义是

回答 1 投票 0

Java 中的尾递归二项式系数函数

我正在寻找实现一个尾递归函数来计算两个数字 n 和 k 的二项式系数。如果 k > n 则应返回 0。类似地,如果 n == k 或 k == 0 它应该返回...

回答 1 投票 0

尾递归与迭代算法

我找不到描述为什么尾递归函数应该优于迭代算法的文章。 我不是问为什么尾递归比简单递归更好,我认为简单......

回答 3 投票 0

在两个单独的 cpp 文件中定义的内联函数可以在链接过程中创建重复的符号吗?

我发现很多在线资源都在讨论内联(甚至 __attribute__((always_inline)) 或 __forceinline)如何不强制编译器(例如 gcc 或 VisualC++)内联函数。但是当

回答 1 投票 0

尾递归和动态规划一样吗?

我正在使用尾递归来编程斐波那契数,它背后的想法似乎与动态编程相同。那么它们是一样的吗?或者更确切地说,...之间存在一定程度的相似性

回答 4 投票 0

F# FoldBack 转换为尾递归函数

出于学习目的,我模拟了 List.foldBack。模拟版本是头递归的。 有没有一种优雅的方法将其转换为尾递归版本? 让 li : int 列表 = [1;2;3] 让记录

回答 1 投票 0

JavaScript 尾部调用中的函数是否经过优化?

我一直在尝试理解JavaScript上下文中的尾调用优化,并为factorial()编写了以下递归和尾递归方法。 递归: 函数阶乘 (n)...

回答 5 投票 0

是否可以在WebKit中检测尾部调用优化?

我有一个递归函数,耗尽调用堆栈是我有时遇到的问题。我知道我可以使用流、promise 和 setTimeout,但我只想编写触发 tai 的代码...

回答 3 投票 0

尾递归函数是否重用Scheme中的单个环境?

我目前正在学习函数式编程的本科课程,我们刚刚了解了Scheme中的环境。据我了解,环境是函数所在的上下文

回答 1 投票 0

如何避免这个使用 Promises 的 JavaScript 函数中的递归?

我有一个 JavaScript 函数,可以生成无尽的幻灯片。该代码有效,但我担心每次迭代都会以递归调用自身结束。使用开发者工具,看起来...

回答 1 投票 0

此处应用的确切编译器优化(除了尾递归消除之外)是什么?

我正在编写一个简单的C程序,实现一个中序树遍历函数: void inorderTraversal(struct TreeNode* root) { 如果(根== NULL){ 返回; } 中序遍历(...

回答 1 投票 0

哪些 C++ 编译器(如果有)进行尾递归优化?

在我看来,在 C 和 C++ 中进行尾递归优化都可以很好地工作,但在调试时我似乎从未看到表明这种优化的帧堆栈。那是...

回答 5 投票 0

使用Lomuto算法进行分区的快速排序函数中“pi+1”语句如何消除尾部调用?

/* 尾调用消除后的快速排序 */ #包括 交换两个元素的实用函数 无效交换(int * a,int * b) { int t = *a; *a = *b; *b = t; } /* 这福...

回答 2 投票 0

为什么堆栈大小因功能(V8 引擎)而异?

我只是尝试查看我的机器上的最大调用堆栈大小,然后我发现了一些非常奇怪的东西。我有以下两个功能: 函数事实(o) { 如果(o==0)返回1; ...

回答 1 投票 0

在编写 pow(x,n) 的自定义实现时出现溢出错误:(34,“数值结果超出范围”)

在实现 pow(x, n) 时,对于 (x=2,and n=-2147483648),我收到以下错误: 代码 : 类解决方案: def myPow(自身, x, n): 标志 = n < 0 n = -1 * n if flag else...

回答 3 投票 0

递归的思考方式

所以我在做leetcode 112.path sum,问题是 给定二叉树的根和整数 targetSum,如果树具有从根到叶的路径,以便将所有值相加,则返回 true

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.