斐波那契数列:指的是这样的数列:0,1,1,2,3,5,8,21,34..., 这个数列从第三项开始,每一项都等于前两项之和。
案例代码:
/** * 递归求解斐波那契数列 * 步骤解释: * n=5 foo(4)+foo(3) * =foo(3)+foo(2)+foo(2)+1 * =3foo(2) +1+1 * =3+2 * =5 * * @param n * @return */ private static Integer foo(int n) { if (n < 2) return n; return foo(n - 1) + foo(n - 2); }
循环、递归代码实现斐波那契数列
package top.chenxiky.courseware.sort;
/**
* Created with IntelliJ IDEA.
*
* @Author: chenxiky
* @Date: 2022/03/11/13:28
* @Description: 斐波那契数列
* 斐波那契数列:指的是这样的数列:0,1,1,2,3,5,8,21,34...,
* 这个数列从第三项开始,每一项都等于前两项之和
*/
public class FibonacciLoop {
public static void main(String[] args) {
// 笔试题
System.out.println("答案:" + foo(5));
// 循环实现斐波那契数列
fibonacci_loop(5);
// 打印空行
System.out.println();
// 递归实现斐波那契数列
fibonacci_recursion(1);
}
/**
* 递归求解斐波那契数列
* 步骤解释:
* n=5 foo(4)+foo(3)
* =foo(3)+foo(2)+foo(2)+1
* =3foo(2) +1+1
* =3+2
* =5
*
* @param n
* @return
*/
private static Integer foo(int n) {
if (n < 2)
return n;
return foo(n - 1) + foo(n - 2);
}
/**
* 用循环实现斐波那契数列
*
* @return
*/
public static void fibonacci_loop(int num) {
// num如果小于1直接结束该方法
if (num < 1) {
return;
}
// 设置一个变量输出数据的个数
int n = 0;
// 初始化第一个数
int a = 0;
// 初始化第二个数
int b = 1;
// 第三个数 斐波那契数列第一项等于前两项之和(初始化为0)
int c = 0;
// do while至少循环一次
do {
n++;
if (n == 1) {
System.out.print("循环实现:" + 0 + "\t");
System.out.print(1 + "\t");
}
// 第三个数是前两个数之和
c = a + b;
System.out.print(c + "\t");
// 原来的第一个数变为第二个数
a = b;
// 原来的第二个数变为第三个数
b = c;
} while (n < num);
return;
}
/**
* 递归实现斐波那契数列
*
* @param num
*/
public static void fibonacci_recursion(int num) {
// 边界值判断
if (num < 1) {
return;
}
// 调用递归方法
fibonacci_recursion_handler(1, num, 0, 1);
}
/**
* 在私有的方法里递归调用
*
* @param index // 数据的序号
* @param num // 数列数据的个数
* @param one // 第一个数
* @param two // 第二个数
*/
private static void fibonacci_recursion_handler(int index, int num, int one, int two) {
// 程序的出口
if (index <= num) {
if (index == 1) {
System.out.print("递归实现:" + one + "\t");
System.out.print(two + "\t");
}
// 第三个数是前两个数之和
System.out.print(one + two + "\t");
// 递归 原来的第一个数变成第er个数 原来的第二个数变成第三个数
fibonacci_recursion_handler(++index, num, two, one + two);
}
// // 程序的出口
// if (index > num) {
// // 终止递归
// return;
// } else {
// if (index == 1) {
// System.out.println(0);
// System.out.println(1);
// }
// // 第三个数是前两个数之和
// System.out.println(one + two);
// // 原来的第一个数变成第er个数 原来的第二个数变成第三个数
// fibonacci_recursion_handler(++index, num, two, one + two);
// }
}
}