斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368。
简单地说就是从第三项开始每项的值等于前两项值的和,这样的数列叫做斐波那契数列;关于这个问题。常被我们当作递归来对待,其实它的高效解法是递推,不过这两种方式都可以做,差别在于算法的复杂度。这个稍后我会写帖子详说;
下面我给出两个方法的代码,mother1是递归的解法,mother2是递推的解法。
[Java] 纯文本查看 复制代码 /**
* @author Dadou
* Fibonacci数列的递归解法
*/
package cn.dadoubk.Fibonacci;
public class mother1 {
public static void main(String[] args) {
int n = 10;// 求第n项Fibonacci数值
System.out.println(Fibonacci(n));
}
private static int Fibonacci(int n) {
if (n <= 2)
return 1;
return Fibonacci(n - 1) + Fibonacci(n - 2);
}
}
[Java] 纯文本查看 复制代码 /**
* @author Dadou
* Fibonacci数列的递推解法
*/
package cn.dadoubk.Fibonacci;
public class mother2 {
public static void main(String[] args) {
int n = 10;// 求第n项Fibonacci数值
int[] f = new int[100];
f[1] = 1;
f[2] = 1;
for (int i = 3; i <= n; i++)
f[i] = f[i - 1] + f[i - 2];
System.out.println(f[n]);
}
}
简单说下递归和递推两种算法思想;
递归:大问题转化成小问题
递推:小状态推出大状态
|