Java 兔子问题(斐波那契数列)
2020-04-05 本文已影响0人
叫子非鱼啊
对于第一次面试的java题目仍然记忆尤新。
其中就有一道这样的题目
题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?(输出第10个月的兔子对数)
说实话,那时候是第一次接触这道题,完全不知道规律,更别说多时间内手撕代码了,作为大四实习的萌新来说,只能硬着头皮找规律了呗。
在纸上写写画画,最后你懂的。。。。。
还是没有弄出来(循环语句做出来一个,还是错的。),更别说使用递归的方法了。
其实规律呢,就是第2个月之后的是前两个之和
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21…
看到这里应该已经很明确了,练习递归最常用的就是阶乘了。这个和阶乘也是相同的原理,代码如下:
package com.demo;
import java.util.Scanner;
/**
*
* @author lxh96
*
*题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
*
*小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少?(输出第10个月的兔子对数)
*
*程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21…
*/
public class Demo01 {
public static void main(String[] args) {
System.out.println("请输入一个整数计算前N个月的兔子对数:");
Scanner in = new Scanner(System.in);
int n = 0;
try {
n = in.nextInt();
} catch (Exception e) {
System.out.println("输入错误"+e.toString());
}
for (int i = 1; i <= n; i++) {
System.out.println("第"+i+"个月的兔子对数为:"+getNum(i));
}
}
private static int getNum(int i) {
if (i == 1 || i == 2) {
return 1;
}else {
return getNum(i-1)+getNum(i-2);
}
}
}
实现效果:
image.png面试后查询资料,模仿后写出来一个,当时那个心情就和看到这个美女一样兴奋。
image.png斐波那契数列,对这个词也记忆尤新,毕竟当时没有用递归,不知道这个数列。面试官一脸嫌弃的问,你不知道斐波那契数列?
满脑子的问好
至于想了解斐波那契数列的可以看百度百科-斐波那契数列
两年的时间过去了,这道面试题还清晰的印在脑子里。
想看电影关注我的公众号:电影资源集(支持输入电影名称自动回复了)
喜欢就点个👍吧