斐波那契数列——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 + "\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);
//        }

    }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值