腾讯云
开发者社区
文档
建议反馈
控制台
首页
学习
活动
专区
工具
TVP
最新优惠活动
文章/答案/技术大牛
搜索
搜索
关闭
发布
登录/注册
精选内容/技术社群/优惠产品,
尽在小程序
立即前往
文章
问答
(9999+)
视频
沙龙
5
回答
在科特林有什么意义?
kotlin
tailrec在有尾
递归
的地方
优化
函数。
为什么
编译器
不只是
优化
它呢? C
编译器
优化
尾
递归
。您不必将该方法标记为有尾
递归
。
编译器
只是注意到最后一个操作是
递归
的。就是这样。
为什么
这个看似过度的关键字存在?我错过了什么吗?这纯粹是为了
编译器
而不是用户的方便吗?
浏览 0
提问于2018-08-01
得票数 27
1
回答
对Scala中的@tailrec注释的需求?
scala
我理解
递归
函数的问题和堆栈溢出问题的风险。 然而,如果一个函数能够被
优化
为尾部
递归
,那么
为什么
这个
优化
不
自动
应用于ie。
为什么
我需要标记一个可以用@tailrec
优化
的函数?
浏览 1
提问于2016-01-26
得票数 4
回答已采纳
1
回答
为什么
组合的自
递归
函数不具有相同的数据结构(相同的dims),与其他
递归
一起内联?
haskell
、
optimization
、
compiler-optimization
、
ghc
在教程中,是一个代码示例,它不会通过融合进行
优化
。nofusion0 :: [Int] -> Intsqr x = x * x 我的问题是:
为什么
函数foldr0 (+) 0 . map0 sqr
不能
自动
内联成一个
递归
,如果
编译器
可以很容易地证明,map0不会改变数据结构维度,并推断从结构向上到结构向下运行的所有东西?我仍然找不出,
为什么
这类代码<
浏览 5
提问于2022-02-21
得票数 2
回答已采纳
5
回答
是否存在
不能
使用尾
递归
编写的问题?
functional-programming
、
recursion
、
tail-recursion
尾
递归
是函数式语言中一种重要的性能
优化
策略,因为它允许
递归
调用消耗常量堆栈(而不是O(n))。 有没有什么问题根本
不能
用尾
递归
风格来编写,或者总是可以把一个简单的
递归
函数转换成一个尾
递归
函数?如果是这样的话,有一天函数式
编译器
和解释器是否足够智能,可以
自动
执行转换?
浏览 0
提问于2009-12-11
得票数 53
回答已采纳
2
回答
为什么
|| go(x)是尾部调用,而1+ go(x)不是?
scala
、
recursion
、
tail-recursion
它的Github同伴注释说,a || go(x)仍然是尾部调用
优化
的
递归
,而1 + go(x)不是。计算有什么不同?
为什么
编译器
可以
优化
其中一个而
不能
优化
另一个?
浏览 41
提问于2021-09-17
得票数 1
回答已采纳
3
回答
在函数式语言中,
编译器
如何将非尾
递归
转换成循环以避免堆栈溢出(如果有的话)?
recursion
、
functional-programming
、
compiler-construction
、
compiler-optimization
、
tail-recursion
虽然我个人并不认为
递归
比for循环更困难(而且通常更容易推理),但我意识到许多
递归
示例不是尾
递归
,因此
不能
使用简单的尾
递归
优化
来避免堆栈溢出。,所有迭代循环都可以转换为
递归
,而这些迭代循环可以转换为尾
递归
,所以当上的答案表明,如果您想避免堆栈溢出,就必须自己显式地管理
递归
到尾
递归
的转换,这让我感到困惑。看起来,
编译器
应该可以完成从
递归
到尾
递归
的所有转换,或者从<e
浏览 4
提问于2017-05-04
得票数 3
回答已采纳
1
回答
Idris使用尾调用
优化
吗?
tail-recursion
、
idris
Scala有尾调用
优化
( TCO ),如果
编译器
不能
使用TCO
优化
递归
函数,我可以告诉
编译器
停止。例如,请参见 。match { case x :: xs => x.length :: allLengths(xs)但是,如果我用annotation.tailrec注释它,
编译器
就会出错错误:无法
优化
@ tail zip注释的方法zip:它包含一个不位于尾部位置的
递归
调用
浏览 2
提问于2020-06-30
得票数 4
5
回答
哪些C++
编译器
会进行尾
递归
优化
?
c++
、
optimization
、
tail-recursion
在我看来,在C和C++中同时进行尾
递归
优化
会非常好,但在调试过程中,我似乎从来没有看到一个框架堆栈来表示这种
优化
。这很好,因为堆栈告诉我
递归
有多深。然而,
优化
也是很好的。有没有C++
编译器
做过这样的
优化
?
为什么
?
为什么
不行?微软-O3的:/O2或 GCC:-O2或MSVC 如何检查
编译器
在特定情况下是否已经这样做了?我仍然建议如何确定某个函数是否被
编
浏览 166
提问于2008-08-29
得票数 160
回答已采纳
1
回答
共享指针会破坏尾调用
优化
吗?
c++
、
recursion
、
shared-ptr
、
compiler-optimization
、
tail-recursion
在我的一个测试中,我试图
递归
地创建一个具有大量值(100万个节点)的列表。所有的值都是const,所以我
不能
执行
常规
循环,这也不够实用,你知道的。测试在Segmentation fault中失败。源代码下面是一个带有
递归
插入元素的简单列表的示例。此外,我还添加了destroy函数,这有助于在销毁过程中避免堆栈溢出。sha
浏览 3
提问于2017-10-23
得票数 5
回答已采纳
1
回答
如何处理从定义为to的函数引发的异常?
c++
、
exception
、
noexcept
据说,将函数定义为noexcept将使
编译器
能够进行一些
优化
来提升程序,如果函数需要抛出,
编译器
将抑制该
优化
。exception const& e){ } //
为什么
我
不能
捕捉到异常我确信是因为noexcept异
常规
范。那么,如果一个函数被标记为n
浏览 1
提问于2021-03-08
得票数 1
3
回答
尾部调用和尾部
递归
有什么区别?
lisp
、
scheme
我知道尾
递归
是函数对自身进行尾部调用的一种特殊情况。但是我不明白尾部调用和尾部
递归
有什么不同。在具有实现TCO (尾部调用
优化
)的“正确尾部
递归
”语言中,如Scheme,这意味着尾部调用和尾部
递归
不会消耗堆栈或其他资源。在
编译器
不能
优化
尾
递归
语言中,程序可能会在堆栈之外运行并崩溃。在“正确的尾
递归
”语言中,我认为实现循环的尾
递归
并不比使用循环的效率低。
浏览 0
提问于2012-08-21
得票数 19
1
回答
使用宏作为函数
common-lisp
我刚接触Common Lisp,所以这让我有点困惑,Google也让我失望了。(defun sizzle (f &rest r) ...blah blah...)(apply #'and r)所以,我的问题是,有没有一种方法可以使用宏作为函数(很像上面的函数),或者我应该只制作自己的函数来检查是否所有的值都是给定的列表中的非空的?或者还有另一种我没有想过的方法?
浏览 0
提问于2013-02-13
得票数 2
回答已采纳
3
回答
在Clojure中一起使用Default可选参数和recur
recursion
、
clojure
、
tail-call-optimization
我可以设置默认参数并使用它进行
常规
递归
,但由于某些原因,我
不能
使用recur进行尾部
优化
……我一直收到一个java.lang.UnsupportedOperationException: nth not例如,对于尾部调用Factorial,以下是有效的方法,但没有针对尾部调用
递归
进行
优化
,并且对于大型
递归
堆栈将失败。optional]] (recur (dec n) (*' (or optio
浏览 7
提问于2016-09-30
得票数 1
1
回答
在
递归
函数的情况下,不执行零。
scala
、
recursion
我有
递归
的函数,但是Nil =>不工作,我有StackOverflowError。我不明白
为什么
在尾巴总是被传递到函数之后,它没有捕捉到Nil,在某个时候它应该是空的。
浏览 4
提问于2020-03-20
得票数 1
回答已采纳
6
回答
Java中
递归
函数与非
递归
函数的效率比较
c#
、
java
、
recursion
、
performance
据我所知,由于函数调用的开销,
递归
函数通常比等效的非
递归
函数效率低。然而,我最近遇到了一本教科书,书中说这对Java (和C#)来说不是必须的。它没有说明原因,但我认为这可能是因为Java
编译器
以某种方式
优化
了
递归
函数。 有没有人知道
为什么
会这样?
浏览 1
提问于2011-03-11
得票数 6
回答已采纳
2
回答
在C++中执行尾
递归
c++
、
optimization
、
recursion
、
tail-call-optimization
如果我执行尾调用
递归
(与for (;;)...break循环相反),则可以编写更简单的函数。但是,如果
编译器
不能
优化
它,特别是因为它将由最终用户编译,我恐怕会有性能问题。有没有办法告诉
编译器
“确保
优化
了这个尾调用,或者给我一个错误”(例如Scala支持这一点)
编译器
是gcc和MSVC。 一般情况下,我预计会有十来个尾
浏览 5
提问于2015-05-26
得票数 10
3
回答
JVM对尾叫
优化
施加了哪些限制?
scala
、
clojure
、
jvm
、
tail-call
Clojure本身不执行尾调用
优化
:当您有一个尾
递归
函数并且希望对其进行
优化
时,您必须使用特殊的表单recur。同样,如果您有两个相互
递归
的函数,则只能使用trampoline对它们进行
优化
。Scala
编译器
能够对
递归
函数执行TCO,但
不能
对两个相互
递归
的函数执行TCO。 每当我读到关于这些限制的文章时,都会将它们归因于JVM模型固有的一些限制。我对
编译器
几乎一无所知,但这让我有点困惑。在这种情况下,实际上,艰苦的工
浏览 0
提问于2012-07-21
得票数 38
回答已采纳
1
回答
在固定大小的数组上展开C++中的循环是否更有益处?
c++
、
optimization
、
stdarray
、
loop-unrolling
为什么
我
不能
看到前两个常量c1[0] + c2[0]和c1[1] + c2[1]?另一方面,7 + 5 = 12被移动:
为什么
代码的程序集{解释可以吗?如果是这样的话,我们是否可以得出这样的结论:
浏览 1
提问于2019-01-11
得票数 6
回答已采纳
2
回答
编译器
对在循环期间保持静态的属性的
优化
c#
、
optimization
、
compiler-optimization
0; item < count; item++) CalculateTax(state, zip, Customer.Orders[item]);该条规定:
为什么
以这种方式对属性进行
优化
的可能性“要小得多”,以及何时可以期望某个特定的属性被
优化
或不被
优化
?我假设在访问器中执行额外操作的属性对
编译器
来说更难
浏览 1
提问于2016-01-29
得票数 7
回答已采纳
3
回答
Scala中的尾
递归
和返回语句
scala
") inner_update(attempt+1) }} 第二个实现是否仍然是尾
递归
的我仍然不太清楚函数何时是尾
递归
,何时不是尾
递归
。
浏览 1
提问于2011-03-15
得票数 1
回答已采纳
点击加载更多
扫码
添加站长 进交流群
领取专属
10元无门槛券
手把手带您无忧上云
相关
资讯
陈天奇最新研究:递归模型编译器CORTEX
Java初学者的30个常见问题
十分钟过一遍Kotlin知识点
每位合格的程序员都必须学好的一门课程
鉴释课堂丨编译器技术入门知识一网打尽
热门
标签
更多标签
云服务器
ICP备案
实时音视频
对象存储
即时通信 IM
活动推荐
运营活动
广告
关闭
领券