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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

今天晚上晚自习的时候看到一个兔子生兔子的一个古典问题,问题如下:
有一对兔子,从出生后第3个月起每个月都生一对兔子,
小兔子长到第三个月后每个月又生一对兔子,
假如兔子都不死,问每个月的兔子对数为多少?
那个Demo解决这个问题用的是一个递归函数来解决的
题目分析如下:
程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
class Demo1
{
        public static void main(String[] args)
        {
                System.out.println(fun(8));
        }

       
        private static int fun(int n)
        {
                if(n==1 || n==2)
                {
                        return 1;
                }
                else
                {
                        return fun(n-1)+fun(n-2);
                }
        }


看完这个程序的解决,我后来又去找了一个自然数相加,用递归来解决的Demo

        private static int ziRanShu(int x)
        {
                if (x == 1)
                {
                        return 1;
                }
                int temp = ziRanShu(x-1);
                return temp + x;
        }

}
用递归写的这些函数,虽然看上去很简单,但是我看了半天都没有怎么看懂到底为什么要这样写,就是那些数据的关联到底在哪里.
也就是一直不知道什么时候才可以用递归这样的算法,什么样的规律的数据才能用递归去算.
然后去看了一下书中写那个自然数的Demo
那里你是说了一下用递归一定要有结束标记,但是具体什么样的数据可以这么用我还是不懂.
所以希望哪位大神可以帮忙解答一下这个问题呀!
谢谢了
               

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马