减治法--士兵过河

本题截取于算法设计与分析基础第五章课后习题第一题,摆渡的士兵,题目愿意如下:

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);
            
        }
     
    }

扫描二维码关注公众号,回复: 4292547 查看本文章

程序的结果为:

3
需要移动的次数为: 12
---------------------  
作者:ivory_lei  
来源:CSDN  
原文:https://blog.csdn.net/ivory_Lei/article/details/6946049  
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/phoenixcsl/article/details/84447936