小猴子吃苹果,一次吃一半多一个,十天之后剩1个(其实是吃了9天),问第一天有多少苹果。
当我用for循环的时候我发现很简单就可以搞定:前一天就是 x/2-1=1 ——> x=(1+1)*2
public class Monkey { public static void main(String[] args) { int sum=1; for(int i = 1;i<10;i++){ sum=(sum+1)*2; } System.out.println(sum); } }
对于循环我认为是从第十天推第九天然后到第一天的时候有多少苹果。是一个倒推的思想。
当我看了网上的方法是用的递归:
public class monkey { private static int f(int n){ if(n == 10){ return 1; }else{ return 2 * (f(n + 1) + 1); } } public static void main(String[] args) { int day=1; System.out.println(f(day)); } }
而递归则是一个正向的思想,运算还是倒推回来。
就像话螺旋一样,循环是从一点开始想外画,而递归是从外画到最里面的一点。相同的是他们都知道自己的起点终点。
程序的递归好难理解。。背过把。
https://www.bilibili.com/video/av6749471/?p=25(可以看一下)
总结
递归方法:1.已知按剧情发展的最后结果(剩下一个苹果),根据结果确定返回类型(题中是int)
2.有一个让递归终止的条件(题中是第十天)
3.找出关系表达式,按关系列出来(题中是 当天是(后面一天吃的+1个)的2倍)
---------------------
感谢此博客博主帮我理解了递归!
原文:https://blog.csdn.net/qq_37752233/article/details/79652621?utm_source=copy