今天晚上晚自习的时候看到一个兔子生兔子的一个古典问题,问题如下:
有一对兔子,从出生后第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
那里你是说了一下用递归一定要有结束标记,但是具体什么样的数据可以这么用我还是不懂.
所以希望哪位大神可以帮忙解答一下这个问题呀!
谢谢了
|
|