算法分析与设计基础4.1题
package suanfa3;
/**
* n个士兵组成的小分队必须越过一条又深又宽,又没有桥的河。他们注意到在岸边有两个十二岁大的小男孩在玩划艇。
* 然而船非常小,只能容纳两个男孩或者是一个士兵。
* 怎样才能让士兵渡过河并且留下两个男孩共同操作这条船?
* 这条船要与岸之间横渡多少次?
*
* 当n=1时
* 1。两个个孩子过去
* 2。一个孩子回来
* 3。士兵过去
* 4。一个孩子回来,此时两个孩子都在有船的岸边
* 可以推断出f(n) = f(n-1)+4
* 当n==1时f(1)==4
*
* 构造循环不变式:
* 1。每一次循环前保证两个孩子和船都回到初始位置
* 2。循环递增士兵的数量
* 3。当i>n时结束循环
*/
public class code1 {
public static void main(String[] args) {
System.out.println(down(4));
System.out.println(uper(4));
}
//自底向上的迭代
public static int uper(int n){
int sum = 0;
while(n>=1){
sum+=4;
n--;
}
return sum;
}
//自顶向下的递归
public static int down(int n){
if(n==0) return 0;
if (n==1) return 4;
else return down(n-1)+4;
}
}