使用尾递归和 Fibonnaci 式递归来解决 Fibonnaci 序列

使用递归来获得 Fibonnaci 序列的第 N 项的简单且最明显的方法是这样的

int get_term_fib(int n)
{
  if (n == 0)
    return 0;
  if (n == 1)
    return 1;
  return get_term_fib(n - 1) + get_term_fib(n - 2);
}

但是,此算法不能扩展到更高的术语:对于越来越大的 n,你需要进行的函数调用的数量呈指数增长。这可以用简单的尾递归替换。

int get_term_fib(int n, int prev = 0, int curr = 1)
{
  if (n == 0)
    return prev;
  if (n == 1)
    return curr;
  return get_term_fib(n - 1, curr, prev + curr);
}

现在,对函数的每次调用都会立即计算 Fibonnaci 序列中的下一个项,因此函数调用的数量与 n 成线性比例。