public class FibonacciNum {
/**
* 斐波那契数列
* 1 1 2 3 5 8 13 21
* 从第三个开始.后面一个数是前面两个 数的和
* 两种求法.
* 1.通过数组来求
* 2.通过递归来求
* @param args
*/
public static void main(String[] args) {
arrFibonacciNum(5);
System.out.println(diguiFibonacciNum(0));
}
/*
* 通过递归来求斐波那契数列
* 分析.
* 返回值.int 参数列表 int num
* 1 = fun(1)
* 1 = fun(2)
* 2 = fun(1) + fun(2)
* ...
*/
public static int diguiFibonacciNum(int num){
//如果不加健壮性判断.栈内存会溢出
if(num <= 0) {
System.out.println("请输入正确的数字");
return -1;
}
//重点在这里.当num=1或者2 返回1
if(num == 1 || num == 2)
return 1;
return diguiFibonacciNum(num - 2) + diguiFibonacciNum(num - 1 );
}
/*
* 通过数组来求
* 分析.
* 1.定义一个数组,长度为size
* 2.把数组的第一个元素和第二个元素设定为1.
* 3.第三个元素是前一个元素和前前元素的和.
* 4.遍历这个数组
*/
public static void arrFibonacciNum(int size) {
if(size <= 0) {
System.out.println("请输入 正确的长度");
return;
}
if(size <= 2) {
for (int i = 1; i <= size; i++) {
System.out.println(1);
}
return;
}
int[] arr = new int[size];
arr[0] = 1;
arr[1] = 1;
for (int i = 2; i < arr.length; i++) {
arr[i] = arr[i-1] + arr[i-2];
}
for (int i : arr) {
System.out.print(i + " ");
}
}
}
|