数据结构中的尾递归
我们将在本文中了解什么是尾递归。尾递归基本上是使用递归函数作为函数的最后一条语句。因此,当完成递归调用后无所事事,即称为尾递归。我们来看一个尾递归的示例。
示例
#include <iostream> using namespace std; void printN(int n){ if(n < 0){ return; } cout << n << " "; printN(n - 1); } int main() { printN(10); }
输出
10 9 8 7 6 5 4 3 2 1 0
尾递归比非尾递归更好。由于在递归调用后没有剩余任务,因此编译器可以更轻松地优化代码。调用一个函数时,其地址将存储在堆栈中。因此,如果它是尾递归,则无需将地址存储到堆栈中。
我们可以使用递归来计算阶乘,但该函数不是尾递归。在 fact(n) 中使用了 fact(n-1) 的值。
long fact(int n){ if(n <= 1) return 1; n * fact(n-1); }
我们可以通过添加一些其他参数来使其成为尾递归。如下所示:
long fact(long n, long a){ if(n == 0) return a; return fact(n-1, a*n); }
广告