方法1:递归方法
/* * 斐波那契数列 * 0 1 1 2 3 5 8 13 21........ * 就是Fn=F n-1 + F n-2 ,某一个数字都是它前面2个数字之和 ,求第n位 * * * * * */ package alg3yur8; public class Feb { public static long getFeb(int n) { if(n == 1) return 0; if(n == 2) return 1; //下面是递归的核心 ,调用函数的本身 return getFeb(n-1)+getFeb(n-2); //括号里面的下标数字必须有变动,要不然是递归死循环 } public static void main(String[] args) { System.out.println(getFeb(4)); } }方法2 变量交换循环相加
/* * * 0 1 1 2 3 5 8 13 * 用循环的方法求斐波那契 * 变量交换 * 1 v1 + v2 = v3 * 2 把v3 交给v2 ,把v2交给v1 * 3 再执行 第一步,继续循环 * * */ package alg3yue81; public class Feb2 { public static long getFeb1(int n) { int val1 = 0 , val2=1 , val3=0 ; //定义 n-2 n-1 n //定义一个变量temp,用来存储val2变换前的值 int temp = 0; // for(int i = 1; i<= n-2; i++ ) { val3 = val1+val2; //要有一个东西保存好val2 ,因为在交换之前就变掉了 temp = val2; val2 = val3; val1 = temp; } return val3; } public static void main(String[] args) { System.out.println(getFeb1(7)); } } 思路:
参考文献
http://blog.csdn.net/tommyzht/article/details/47054125