菲波那契数列的格式如下:
1 1 2 3 5 8 13……
满足:
1.前两项为 1
2.前两项的和等于第三项
在这里我们用到了 递归算法:
递归:自己调用自己 肯定有自己的出口不然就死循环了
递归的特点:优点:思路清晰
缺点:效率低
首先看一下代码:
import java.util.*;
public class Work21{
static int n;
static int m;
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("输入要输出菲波那契数列的项数:");
n = scan.nextInt(); //输入要输出的项数
for(int i=0;i<n;i++){ //循环输出菲波那契数列
System.out.print(getfbnq(i)+" ");
}
}
//获得菲波那契数列各项的值
public static long getfnum(int a){
if(a<2){ //满足这个条件停止递归 递归出口
return 1;
}else{ //求菲波那契数列的公式
//在这里我们用到了递归,也就是让getfnum(int a)方法自己再调用自己,直到条件不满足,开始传递数据一层一层归来
return (getfnum(a-1)+getfnum(a-2));
}
}
}
这里的难点就是自己调用自己,下面通过一个图来表达一下:
首先是求G的值,G=E+F,然后F=D+E,E=C+D ……
一直往前找,走到了程序的出口,找到了A、B,满足了设定的条件而且它们有值,然后再依次传递给前面,最终E、F都有值了,即G也就获得了值。
总结为一句话:没有值就一直传递,直到满足了设定的条件,出口,再归来,即递归。
原理如图: