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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 15626187339 初级黑马   /  2016-11-8 22:14  /  1103 人查看  /  10 人回复  /   3 人收藏 转载请遵从CC协议 禁止商业使用本文

1.用循环实现不死神兔
        故事得从西元1202年说起,话说有一位意大利青年,名叫斐波那契。
        在他的一部著作中提出了一个有趣的问题:假设一对刚出生的小兔一个月后就能长成大兔,
        再过一个月就能生下一对小兔,并且此后每个月都生一对小兔,一年内没有发生死亡,
        问:一对刚出生的兔子,一年内繁殖成多少对兔子?
       
      如         1 1 2 3 5 8 13 21

package com.lin.homeWork;

import java.util.Scanner;

public class Day_17
{
        public static void main(String[] args)
        {
                Scanner sc = new Scanner(System.in);
                while(sc.hasNext())
                {
                        int i = sc.nextInt();
                        int countOfRabbit = Exercises_day17_1.countOfRabbit(i);
                        System.out.println(countOfRabbit);
                        Exercises_day17_1.count(i);
                }
        }
}

class Exercises_day17_1
{
        public static int countOfRabbit(int months)
        {
                if(months==1 || months==2)
                {
                        return 1;
                }
                return countOfRabbit(months-1) + countOfRabbit(months - 2);
        }
       
        /*
         * 1
         * 1
         * 1  1 =  2
         * num1 = 1
         * num2 = 2
         * 1  2 = 3
         * temp = num1
         * num1 = num2
         * num2 = num1+temp
         * 2  3 = 5
         * temp = num1
         * num1 = num2
         * num2 = num1+temp
         * 3  5 = 8
         */
        public static void count(int months)
        {
                // 1月 1
                int num1 = 0;
                int num2 = 0;
                for(int i=0; i<months; i++)
                {
                        if(i==0)
                        {
                                num1 = 1;
                        }
                        int temp = num1;
                        num1 = num2;
                        num2 = num1 + temp;
                }
                System.out.println(num2);
        }
}

10 个回复

倒序浏览
回复 使用道具 举报
回复 使用道具 举报
经典题目,好复杂的说
回复 使用道具 举报
斐波那契数列而已,学了数组之后,直接定义数组,无非就是前两项只和是后一项。就把这个数列搞定了,剩下就是要数列出来就遍历数组,要求和就用for循环数组元素相加。这个不难,加油
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
回复 使用道具 举报

怎么可能是递归,方法调用方法本身呢
回复 使用道具 举报
package 拓展练习题;

import java.util.Scanner;

//1 1 2 3 5 8 13 21
public class a {
       
        public static void main(String[] args){
                System.out.println("输入月份时长");
                int n = new Scanner(System.in).nextInt();
                System.out.println("第"+n+"个月兔子总数为"+递归(n));
        }
        private static int 递归(int n){
                if(n==1 || n==2)
                   return 1;
                else
                   return 递归(n-1)+递归(n-2);
        }
       
}
回复 使用道具 举报 1 0
回复 使用道具 举报
Jarc 高级黑马 2016-11-11 12:23:30
10#
L10052108 发表于 2016-11-9 16:38
怎么可能是递归,方法调用方法本身呢

有个出口就行了啊,大哥
来自宇宙超级黑马专属苹果客户端来自宇宙超级黑马专属苹果客户端
回复 使用道具 举报
不吃大米 发表于 2016-11-9 20:17
package 拓展练习题;

import java.util.Scanner;

没想到,确实可以使用递归。受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马