使用尾遞迴和 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 成線性比例。