1:斐波那契數列演算法,如:1,1,2,3,5,8,13,21…… ,可以看到這裡面的規律吧.就是每一項是前面相鄰兩項之和.求第N項。
遞迴法:
1 public static int Fibonacci(int n) { 2 //參數合法性驗證 3 if (n < 1)4 Console.WriteLine("參數必須大於1!");5 if (n == 1 || n == 2) 6 return 1;7 else 8 return Fibonacci(n - 1) + Fibonacci(n - 2); 9 }
非遞迴方式
2 public static int fx(int n) { 3 //參數合法性驗證 4 if (n < 1) 5 Console.WriteLine("參數必須大於1!"); 6 //n為1或2時候直接傳回值 7 if (n == 1 || n == 2) return 1; 8 //n>2時候迴圈求值 9 int Nn = 0; 10 int N1 = 1; 11 int N2 = 1; 12 for (int i = 3; i <= n; i++) {13 Nn = N1 + N2;14 N1 = N2;15 N2 = Nn; 16 }17 return Nn; 18 }
總結:遞迴的代碼簡單些,不過遞迴總體來說是以記憶體換時間,速度快,耗記憶體。
非遞迴比較省記憶體,速度稍微慢些。 出題:1,5,11,27,65,157,。。。,N。求第N項是多少?斐波那契變式。
1 public static int Fibonacci(int n) { 2 //參數合法性驗證 3 if (n < 1) 4 Console.WriteLine("參數必須大於1!"); 5 if (n == 1) 6 return 1; 7 else if (n == 2) 8 return 5; 9 else 10 return Fibonacci(n - 1)*2 + Fibonacci(n - 2); 11 }
有空大家可以思考其他方式。