tailrec优化尾递归的函数.为什么编译器无论如何都不优化它?
C编译器优化尾递归.您不必将该方法标记为具有尾递归.编译器只是注意到最后一个操作是递归的.就是这样.
为什么这个看似过多的关键字存在?我错过了什么吗?它纯粹是为了方便编译器,而不是用户?
yol*_*ole 18
该关键字告诉编译器该函数的实现需要是尾递归的,并且如果该函数实际上不是尾递归的,则会导致编译器报告错误.它保护用户免受对函数实现的更改导致它不再是尾递归的情况,并导致性能意外下降(或由于堆栈溢出错误而导致生产完全失败).
我继续猜测这是为了能够更有意地编写尾递归函数。通过显式要求关键字,您将知道编译器优化肯定会发生(您不会猜测编译器是否成功优化了您的函数,或者您是否会在运行时出现堆栈溢出),而且您的代码将不会'如果您违反了使用 制作的函数的尾递归规则,甚至无法编译tailrec,如文档所述:
要符合 tailrec 修饰符的条件,函数必须调用自身作为它执行的最后一个操作。
| 归档时间: |
|
| 查看次数: |
946 次 |
| 最近记录: |