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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿牛 中级黑马   /  2012-3-23 20:19  /  2218 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 牛秦勇 于 2012-3-23 20:21 编辑

记得老师以前说过,做程序,最重要的不是语言,而是算法和数据结构,语言只是实现的工具而已。当然,我认为,语言也非常重要,就像人体的各部位一样,不能说哪个重要哪个不重要,少了谁也不行,做程序就是在解决问题,用熟练的高级的语言更清晰高效的表达我们的思想。在大家夯实语言的同时,在此我与大家分享些有趣的问题,拓展我们的思路,提高解决问题的能力。
古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?  

从第一个月起数,每月的兔子对数为:1,1,2,3,5,8,13,21,。。。
从以上数列可以发现,从第三个月开始每月兔子数是前两个月数之和。

public class Rabit
{
    public static void main(String[] args)
    {
    System.out.println("第1个月的兔子对数:    1");
    System.out.println("第2个月的兔子对数:    1");
    int f1 = 1, f2 = 1, f, M=24;//f2为每月兔子数,按对计,M是月份,大小可以随便设,但不能设无限大,否则就永远循环下去了
     for(int i=3; i<=M; i++)
     {
      f = f2;
      f2 = f1 + f2;
      f1 = f;
      System.out.println("第" + i +"个月的兔子对数: "+f2);
      }
}
}

实际上,这是个斐波拉契数列,斐波拉契是13世纪欧洲著名的数学家,著有《算盘书》一书,书上记载了许多有趣的数学问题,上面即是一例。这个数列有许多奇特的的性质,例如,从第3个数起,每个数与它后面那个数的比值,都很接近於0.618,正好与大名鼎鼎的“黄金分割律”相吻合。人们还发现,连一些生物的生长规律,在某种假定下也可由这个数列来刻画呢。

3 个回复

正序浏览
当然!计算机原本就是数学嘛
回复 使用道具 举报
额,谁看过高德纳大神的《计算机程序设计艺术》呢
回复 使用道具 举报
Fibonacci数列,这个在面试的时候很容易见到,要求使用递归。
  1. public int fibonacci(int n)
  2. {
  3.         if(n>=0)
  4.         {
  5.                 if(n==0||n==1)
  6.                         return n;
  7.                 else
  8.                         return fibonacci(n-2)+fibonacci(n-1);
  9.         }
  10.         return -1;
  11. }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马