6.9 再举一个例子

另一个以递归方式定义的常见函数是斐波纳契数列,其定义如下:

\begin{aligned}&fibonacci(1)=1\\&fibonacci(2)=1\\&fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)\end{aligned}

如果将该定义转换为 Java 代码,结果如下:

  1. public static int fibonacci(int n) {
  2. if (n == 1 || n == 2) {
  3. return 1;
  4. }
  5. return fibonacci(n - 1) + fibonacci(n - 2);
  6. }

如果试图沿着上述代码的流程执行,即便 n 的值很小,你也会遇到很多麻烦。但如果采取姑且相信的做法,即假设两个递归调用能够正确地工作,那么就能清楚地知道结果就是这两个递归调用的返回值之和。