如何探讨尾递归优化的有效策略?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2241个文字,预计阅读时间需要9分钟。
在《尾递归与Continuation》一文中,我们讨论了尾递归的概念和示例。有些朋友对尾递归的功效持怀疑态度。鉴于现状,我将简要解释尾递归的优化原理,希望能为大家带来帮助。
在上文《尾递归与Continuation》里,我们谈到了尾递归的概念和示例,不过有些朋友对于尾递归的功效依然有所怀疑。因此现在,我再简单讲解一下尾递归的优化原理,希望能给大家以一定理性认识。
尾递归的循环优化尾递归,即是递归调用放在方法末尾的递归方式,如经典的阶乘:
int FactorialTailRecursion(int n, int acc) { if (n == 0) return acc; return FactorialTailRecursion(n - 1, acc * n); }
由于递归在方法的末尾,因此方法中的局部变量已经毫无用处,编译器完全可以将其“复用”,并把尾递归优化为“循环”方式:
int FactorialLoopOptimized(int n, int acc) { while (true) { if (n == 0) return acc; acc *= n; n--; } }
不过,上文还提到了尾递归中的常用技巧Continuation。
本文共计2241个文字,预计阅读时间需要9分钟。
在《尾递归与Continuation》一文中,我们讨论了尾递归的概念和示例。有些朋友对尾递归的功效持怀疑态度。鉴于现状,我将简要解释尾递归的优化原理,希望能为大家带来帮助。
在上文《尾递归与Continuation》里,我们谈到了尾递归的概念和示例,不过有些朋友对于尾递归的功效依然有所怀疑。因此现在,我再简单讲解一下尾递归的优化原理,希望能给大家以一定理性认识。
尾递归的循环优化尾递归,即是递归调用放在方法末尾的递归方式,如经典的阶乘:
int FactorialTailRecursion(int n, int acc) { if (n == 0) return acc; return FactorialTailRecursion(n - 1, acc * n); }
由于递归在方法的末尾,因此方法中的局部变量已经毫无用处,编译器完全可以将其“复用”,并把尾递归优化为“循环”方式:
int FactorialLoopOptimized(int n, int acc) { while (true) { if (n == 0) return acc; acc *= n; n--; } }
不过,上文还提到了尾递归中的常用技巧Continuation。

