1 ///////////////////////////////////////////////////////////////////////////////
2 //
3 // FileName : fic.c?
4 // Version : 0.10
5 // Author : Ryan Han
6 // Date : 2013/07/01 10:12:30
7 // Comment :
8 //
9 ///////////////////////////////////////////////////////////////////////////////
10 #include <stdio.h>
11
12 static long fib(const long n)
13 {
14 return 0 == n || 1 == n ? 1 : fib(n - 1) + fib(n - 2);
15 }
16
17 int main()
18 {
19 //F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
20 long lResult = fib(5);
21 printf("The resutl is: %ld\n", lResult);
22 }
上面的方法会导致大量的重复计算,为了避免可以用非递归的方式计算:
1 // 19_2.cc
2 #include <iostream>
3 using namespace std;
4
5 size_t fibo(size_t n) {
6 if (n < 2)
7 return n;
8
9 size_t f1 = 0;
10 size_t f2 = 1;
11 size_t res;
12 for (size_t i = 2; i <= n; i++) {
13 res = f1 + f2;
14 f1 = f2;
15 f2 = res;
16 }
17 return res;
18 }
19
20 int main() {
21 size_t n;
22 cout << "please input n:" << endl;
23 cin >> n;
24 cout << "The Fibonacci is: " << fibo(n) << endl;
25 return 0;
26 }
来源:https://www.cnblogs.com/dracohan/p/3164410.html