zoukankan      html  css  js  c++  java
  • 1.Fibonacci数列--兔子数列问题

    兔子繁殖问题
    斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”。
    一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来。如果所有兔子都不死,那么一年以后可以繁殖多少对兔子?
    
    我们不妨拿新出生的一对小兔子分析一下:
    第一个月小兔子没有繁殖能力,所以还是一对;
    两个月后,生下一对小兔对数共有两对;
    三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对;

    兔子数量从开始到目标时间形成的序列,其实是个斐波那契数列。

    经过月数 1 2 3 4 5 6 7 8 9 10 11 12 ...
    幼仔对数 1 0 1 1 2 3 5 8 13 21 34 55  
    成兔对数 0 1 1 2 3 5 8 13 21 34 55 89  
    总体对数 1 1 2 3 5 8 13 21 34 55 89 144  

     

     

     

     

    一般需要将这个问题简化,需要考虑2个问题:

    1.递归序列的递归条件,即什么条件下进行递归调用;

    2.递归序列的返回条件,递归中一定要有返回,否则就是永远也执行不完的程序,直到虚拟机报StackOverflowException;

    使用递归实现代码:

    /**
     * 斐波那契数列
     * Created by llj on 2019/7/6.
     */
    public class Fibonacci {
    
        /**
         * 假设一个数列满足如下规则:
         * 1, 1, 2, 3, 5, 8, 13, 21, 34, 55,
         * 89, 144, 233,377,610,987,1597,2584,4181,6765
         * <p>
         * 请推导出其公式,并求证:第23个数是多少?
         * <p>
         *
         * 公式推导:
         * f(1) = 1; f(2) = 1; f(3) = 2; f(4) = f(3)+ f(2) = f(4-1)+f(4-2)
         * 最后推导出公式: f(n) = f(n-1) + f(n-2) {n>=1}
         */
        public static long fun(long n) {
            if (n == 1 || n == 2) {
                return 1;
            }
            return (fun(n - 1) + fun(n - 2));
        }
    
        public static void main(String[] args) {
            long fun = fun(23);
            System.out.println(fun);
        }
    
    }
    

    完结 -------------------

  • 相关阅读:
    从远程仓库拉去的代码开发后用git推送到另外一个远程仓库
    Git回退本地和远程分支的的版本
    把win10本地hexo博客部署到腾讯云linux服务器
    linux安装mysql
    linux部署nginx
    apache服务器安装到linux
    SqlServerv报错:从数据类型 varchar 转换为 numeric 时出错。
    IDEA2020版Maven依赖成功导入但任然报错找不到包解决方案
    idea中左侧project栏自动隐藏如何解决
    拖延的坏处
  • 原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/11143620.html
Copyright © 2011-2022 走看看