方法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