本帖最后由 牛秦勇 于 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,正好与大名鼎鼎的“黄金分割律”相吻合。人们还发现,连一些生物的生长规律,在某种假定下也可由这个数列来刻画呢。
|
|