工作小记

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

斐波那契数列,对这个词也记忆尤新,毕竟当时没有用递归,不知道这个数列。面试官一脸嫌弃的问,你不知道斐波那契数列

满脑子的问好

至于想了解斐波那契数列的可以看百度百科-斐波那契数列

两年的时间过去了,这道面试题还清晰的印在脑子里。


想看电影关注我的公众号:电影资源集(支持输入电影名称自动回复了)

喜欢就点个👍吧

上一篇下一篇

猜你喜欢

热点阅读