斐波那契数列——java实现
斐波那契数列:指的是这样的数列: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 + " "); System.out.print(1 + " "); } // 第三个数是前两个数之和 c = a + b; System.out.print(c + " "); // 原来的第一个数变为第二个数 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 + " "); System.out.print(two + " "); } // 第三个数是前两个数之和 System.out.print(one + two + " "); // 递归 原来的第一个数变成第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); // } } }
下一篇:
剑指offer27-二叉树的镜像