A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

张笨比

初级黑马

  • 黑马币:30

  • 帖子:10

  • 精华:0

© 张笨比 初级黑马   /  2019-3-8 23:35  /  984 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家好,在最近的一次习题中接触到一个奇妙的数列,我想介绍一下——“斐波那契数列”:指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........
自然中的斐波那契数列
这个数列从第3项开始,每一项都等于前两项之和。
斐波那契数列的定义者,是意大利数学家列昂纳多·斐波那契(Leonardo Fibonacci),生于公元1170年,卒于1250年,籍贯是比萨。他被人称作“比萨的列昂纳多”。
    斐波那契数列中的斐波那契数会经常出现在我们的眼前——比如松果、凤梨、树叶的排列、某些花朵的花瓣数(典型的有向日葵花瓣),蜂巢,蜻蜓翅膀,超越数e(可以推出更多),黄金矩形、黄金分割、等角螺线,十二平均律等。
    在java的学习中相信大家都做过不死神兔的练习 :
有一个很有名的数学逻辑题叫做不死神兔问题。有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第二十个月的兔子对数为多少?
参考代码:
  public class Test {    public static void main(String[] args) {
//为了存储多个月的兔子对数,定义一个数组,用动态初始化完成数组元素的初始化,长度为20        int[] arr = new int[20];      
//因为第1个月,第2个月兔子的对数是已知的,都是1,所以数组的第1个元素,第2个元素值也都是1      
arr[0] = 1;        arr[1] = 1;      
//用循环实现计算每个月的兔子对数      
for(int x=2; x<arr.length; x++) {   arr[x] = arr[x-2] + arr[x-1];}     
//输出数组中最后一个元素的值,就是第20个月的兔子对数      
System.out.println("第二十个月兔子的对数是:" + arr[19]);    }
}
然而我又发现另一个不死神兔题
Fibonacci为1200年代的欧洲数学家,在他的着作中曾经提到:
「若有一只免子每个月生一只小免子,一个月后小免子也开始生产。
起初只有一只免子,一个月后就有两只免子,二个月后有三只免子,三个月后有五只免子(小免子投入生产)......。


这就是著名的不死神兔问题,即Fibonacci数列,一般习惯称之为费氏数列,举例如下: 1、1 、2、3、5、8、13、21、34、55、89......
这个两个题的数组是一样的 为什么题目不一样呢?
我认为是练习题中出错了

一个是第三个月后小兔子生产
一个是第一个月小兔子就生产
以下是我根据上题重新的代码


ublic class FibonacciSequence {
    public static int ARRAY_DEFAULT = 20;//定义数列的大小

    public static void main(String[] args) {
        int[] num = new int[ARRAY_DEFAULT];
        for(int i = 0;i < ARRAY_DEFAULT;i++) {
            if(i == 0 || i == 1) {
                num = 1;
            }else {
                num = num[i-1] + num[i-2];
            }
        }
        printOut(num);
    }

    // 打印数组
    public static void printOut(int[] num) {
        System.out.print("[");
        for (int i = 0; i < num.length; i++) {
            if (i == num.length - 1) {
                System.out.println(num + "]");
            } else {
                System.out.print(num + ",");
            }
        }
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马