zoukankan      html  css  js  c++  java
  • 兔子个数问题(斐波那契数列)

    古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....

    1.递归解法:

    package dataStruct;
    import java.util.Scanner;
    
    /**
     * @ClassName: RabbitDG
     * @Description: TODO
     * @Author: hunterm
     * @Date: 2019/8/5 16:00
     * @Version:1.0
     */
    public class RabbitDG {
        long sum = 0;
        public static void main(String[] args){
            System.out.println("请输入月数...");
            Scanner sc = new Scanner(System.in);
            long months = sc.nextLong();
            System.out.println("第"+months+"个月,兔子的对数为:"+new RabbitDG().getRabbitSum(months));
        }
        /**
         * 递归方法
         * 1 1 2 3 5 8 13 21
         */
        public long getRabbitSum(long months){
            if(months == 1 || months ==2){
                return 1;
            }else{
                return sum = getRabbitSum(months - 1) + getRabbitSum(months - 2);
            }
        }
    }
    

      2.非递归解法

    package dataStruct;
    
    import java.util.Scanner;
    /**
     * @ClassName: Rabbit
     * @Description: TODO
     * @Author: hunterm
     * @Date: 2019/8/5 15:46
     * @Version:1.0
     */
    public class Rabbit {
        public static void main(String[] args) {
            System.out.println("请输入月数...");
            Scanner sc = new Scanner(System.in);
            long months = sc.nextLong();
            System.out.println("第"+months+"个月,兔子的对数为:"+new Rabbit().get(months));
        }
        /**
         * 规律:1 1 2 3 5 8 13 21
         */
        public long get(long months) {
            long f1 = 1L;
            long f2 = 1L;
            long f = 0;
            if(months == 1 || months == 2){
                return 1;
            }
            for (int i = 3; i <= months; i++) {
                f = f2;
                f2 = f1 + f2;
                f1 = f;
            }
            return f2;
        }
    }
    

      递归方法大家都会,所以面试时一般考察非递归方式求解。

      

  • 相关阅读:
    三线程连续打印ABC
    Mybatis知识点总结
    【刷题】LeetCode 292 Nim Game
    Java界面编程-建立一个可以画出图形的简单框架
    第11章 持有对象
    第10章 内部类
    构造器和多态(Chapter8.3)
    对象的创建过程(chapter5.7.3)
    静态数据的初始化(Chapter5.7.2)
    final关键字
  • 原文地址:https://www.cnblogs.com/maohaitao/p/11305861.html
Copyright © 2011-2022 走看看