Java递归练习----猴子偷桃
问题:
有一堆桃子,猴子第一天吃灵其中的一般,并在多吃了一个!以后每天猴子都吃其中的一半,然后多吃一个。当到第十天时,想再吃时(即还没吃),发现只有1个桃子了,问最初多少个桃子?
递归的内存执行机制:
此图片和问题无关,就是一个例子,大家可以根据我的标注一点点看,如果看不懂的话,可以看一下:传送门
上述图片来源于韩顺平老师讲Java课的图片
递归可以理解为一直自己调用自己,根据栈空间,每次调用方法都会创建一个新的数据空间,一直到条件不允许执行,结果递归,一层层回去。每次的返回证明这段栈空间的代码全部执行完毕,此方法也就从栈空间出去了,比如上述标4,5,6的地方!
递归需要注意一定要找到出口,换句话说就是结束递归的条件。不然就成“死龟了”。
代码:
class Tool
{
int res = 0;
public int rec(int d)
{
if(d == 10)
{
return 1;
}
res = (rec(d+1) + 1 ) * 2;
return res;
}
}
public class test6
{
public static void main(String[] args)
{
int d = 1;
Tool t = new Tool();
int res = t.rec(d);
System.out.println(res);
}
}
规律:
当前的桃子 = (后一天的桃子 + 1) * 2
欢迎喜欢的小伙伴关注哦,上述规律大家可以自己推一下,这里需要逆向思维一下,如果有错误欢迎留言!