java中迴圈與遞迴
小猴子吃蘋果,一次吃一半多一個,十天之後剩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倍)