摆渡的士兵分析(一)以及代码实现
本题截取于算法设计与分析基础第五章课后习题第一题,摆渡的士兵,题目愿意如下:
n个士兵组成的小分队必须越过一条又深又宽,又没有桥的河。他们注意到在岸边有两个十二岁大的小男孩在玩划艇。然而船非常小,只能容纳两个男孩或者是一个士兵。怎样才能让士兵渡过河并且留下两个男孩共同操作这条船?这条船要与岸之间横渡多少次?
下面用图来对问题进行描述与分析:
假设小孩与士兵在同一岸边
士兵:1 孩子:2
因此可以得到n个士兵时求解的公式如下:
F(n) = F(n-1) + 4 n>1
F(1) = 4 n=4
则求解n个士兵时所需要的渡河次数的代码为:
import java.util.Scanner; public class ThroughRiver { public int calculateNum(int soldier){ int number; if(soldier==0){ number = 0; }else if(soldier == 1){ number = 4; }else{ number = calculateNum(soldier-1)+4; } return number; } public static void main(String[] args){ ThroughRiver tr = new ThroughRiver(); Scanner sc = new Scanner(System.in); int soldier = sc.nextInt(); int moveNum= 0; moveNum = tr.calculateNum(soldier); System.out.println("需要移动的次数为: "+moveNum); } }程序的结果为:
3 需要移动的次数为: 12