尾递归的妙处

简介: 尾递归的妙处 当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。 很多编译器会利用这种特点自动生成优化的代码。 看看编译器为什么可以做到这点。因为递归调用是当前活跃期内最后一条待执行的语句,于是当这个调用返回时栈帧中并没有其他事情可做,因此也就没有保存栈帧的必要了。通过覆盖当前的栈帧而不是在其之上重新添加一个,这样所使用的栈空间就大大缩

尾递归的妙处

当递归调用是整个函数体中最后执行的语句且它的返回值不属于表达式的一部分时,这个递归调用就是尾递归。

很多编译器会利用这种特点自动生成优化的代码。

看看编译器为什么可以做到这点。因为递归调用是当前活跃期内最后一条待执行的语句,于是当这个调用返回时栈帧中并没有其他事情可做,因此也就没有保存栈帧的必要了。通过覆盖当前的栈帧而不是在其之上重新添加一个,这样所使用的栈空间就大大缩减了,这使得实际的运行效率会变得更高。因此,只要有可能我们就需要将递归函数写成尾递归的形式。

目录
相关文章
C4.
|
2月前
|
C语言
C语言函数的递归调用
C语言函数的递归调用
C4.
14 0
|
5月前
什么是递归函数?怎样实现递归?
什么是递归函数?怎样实现递归?
|
7月前
尾递归
尾递归是一种递归函数优化技术,它指的是在递归函数的最后一步操作中,调用自身并返回结果,而不进行任何其他操作。尾递归可以有效地减少递归调用的次数,从而提高程序的执行效率。
29 5
|
8月前
|
算法
递归函数(详解+实战)
递归函数(详解+实战)
|
11月前
|
机器学习/深度学习
递归函数问题
递归函数问题
42 0
|
算法 C++
【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
80 0
【算法作业】实验四:逆波兰表达式求值 & Fibonacci数列的尾递归与非递归程序
函数递归调用
关于递归的例题和递归展开图
63 0
函数递归调用
|
Java 编译器 Python
聊聊递归函数
我们知道在一个函数内部是可以调用其他函数。那么如果一个函数在内部调用函数自身,这个函数就是递归函数。
179 0