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);
    }

}

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

原文地址:https://www.cnblogs.com/shiguangmanbu2016/p/11143620.html

时间: 2024-08-01 03:00:06

1.Fibonacci数列--兔子数列问题的相关文章

js算法集合(二) javascript实现斐波那契数列 (兔子数列) Javascript实现杨辉三角

js算法集合(二)  斐波那契数列.杨辉三角 ★ 上一次我跟大家分享一下做水仙花数的算法的思路,并对其扩展到自幂数的算法,这次,我们来对斐波那契数列和杨辉三角进行研究,来加深对Javascript的理解. 一.Javascript实现斐波那契数列 ①要用Javascript实现斐波那契数列,我们首先要了解什么是斐波那契数列:斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为

斐波那契数列——兔子繁殖问题

斐波那契数列又因数学家列昂纳多·斐波那契以兔子繁殖为例子而引入,故又称为“兔子数列”. 斐波那契数列 一般而言,兔子在出生两个月后,就有繁殖能力,一对兔子每个月能生出一对小兔子来.如果所有兔都不死,那么一年以后可以繁殖多少对兔子? 我们不妨拿新出生的一对小兔子分析一下: 第一个月小兔子没有繁殖能力,所以还是一对; 两个月后,生下一对小兔民数共有两对; 三个月以后,老兔子又生下一对,因为小兔子还没有繁殖能力,所以一共是三对; --- 依次类推可以列出下表: 经过月数:0,1,2,3,4,5,6,7

高等数学(4) 数列与数列极限

一.数列与数列极限 刘徽--割圆术 还可以表示为 xn= 1- 1/(2^n) 因为棒长是固定1 减去最后一天剩下的 也是截取的总长 1-1/(2^n)无限趋近于1 数列的定义 ·按自然数1,2,3,-编号依次排列的一列数 x1 x2 - xn - 称为无穷数列 简称数列 ·其中每个数称为数列的项,xn称为通项(一般项) 此数列可记为{xn} 例如 2 4 8 -2^n- {2^n} 问题 ·当n无限增大时 xn是否无限接近某一确定的数指 上面实验 当n无限增大时 数列{1+ ( (-1)^(n

【Java】斐波那契数列(Fibonacci Sequence、兔子数列)的3种计算方法(递归实现、递归值缓存实现、循环实现)

斐波那契数列:0.1.1.2.3.5.8.13………… 他的规律是,第一项是0,第二项是1,第三项开始(含第三项)等于前两项之和. > 递归实现 看到这个规则,第一个想起当然是递归算法去实现了,于是写了以下一段: public class RecursionForFibonacciSequence { public static void main(String[] args) { System.out.println(recursion(10)); } public static double

斐波那契数列-兔子问题

/************************************************************************************************  题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,*  小兔子长到第三后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? *  1.程序分析: 兔子(对)的规律为数列1,1,2,3,5,8,13,21....* @param args* [斐波那契数列]*********

Java程序设计之裴波拉切那数列(兔子一年的数量)

题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21.... 典型的裴波拉切那问题不多说了,直接上代码好了. import java.util.ArrayList; public class SecondThread{ static ArrayList<Integer> list = new ArrayList(); int num

Fibonacci数列(数列 取模)

问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 55 样例输

斐波那契数列(兔子数列)

学编程的人肯定接触过"斐波那契数列"和"约瑟夫环",这里给出两种代码的写法意思不在于体会不同.而是要找到方法.也就是我们所说的数据结构和算法.基础很重要,以此告诫自己莫要追逐PHP华丽的函数. F(n)=f(n-1)+f(n-2) F(1)=1 F(2)=1 PHP代码: <?php // 斐波那契数列 $arr = array(1,1); for ($i=2; $i<20; $i++) { //printf("i-1 = %s, i-2 = 

「BZOJ1485」[HNOI2009] 有趣的数列 卡特兰数列

「BZOJ1485」[HNOI2009] 有趣的数列   Description 我们称一个长度为2n的数列是有趣的,当且仅当该数列满足以下三个条件: (1)它是从1到2n共2n个整数的一个排列{ai}: (2)所有的奇数项满足a1<a3<-<a2n-1,所有的偶数项满足a2<a4<-<a2n: (3)任意相邻的两项a2i-1与a2i(1≤i≤n)满足奇数项小于偶数项,即:a2i-1<a2i. 现在的任务是:对于给定的n,请求出有多少个不同的长度为2n的有趣的数列