Java:利用递归方法求鸭子数

2023-05-16

问题描述:

       一个人赶着鸭子去每个村庄卖,每经过一个村子卖去所赶鸭子的一半又一只。这样他经过了七个村子后还剩两只鸭子,问他出发时共赶多少只鸭子?经过每个村子卖出多少只鸭子?

题目分析:

     设经过第n个村子时有count(n)只鸭子,卖去count(n)/2+1只鸭子,剩下count(n+1)只鸭子,则有count(n)=count(n)/2+1+count(n+1),即count(n)=2*(count(n+1)+1)。经过了七个村子后还剩两只鸭子,即count(8)=2。因此出发时共赶count(1)只鸭子,经过第n个村子时卖出count(n)/2+1只鸭子。

算法构造:

function(n){

       count(n)=2*(count(n+1)+1)   ,1<=n<8;

       count(n)=2                            , n=8

}
     

实现代码如下:

package com._520it;

/**
 * 计算鸭子的数量
 * @author Jack
 * @date 2018-11-16
 * @version 1.0
 */
public class Duck {
    public static void main(String[] args) {
        // 获取出发时鸭子总数
        int result = saleDuck(0);
        // 对经过的村子所卖出的鸭子计数
        int count = 0;
        System.out.println("出发时共赶" + result + "只鸭子!");
        for (int index = 1; index <= 7; index++) {
            // 经过村子时所卖出的鸭子数
            int ducks = result / 2 + 1;
            count += ducks;
            // 更新剩余鸭子数
            result = 510 - count;
            if(index != 7){
                System.out.println("经过第" + index + "个村子,卖出" + ducks + "只鸭子,还剩余" + (510 - count) +"只鸭子,");
            }else {
                System.out.println("经过第" + index + "个村子,卖出" + ducks + "只鸭子,还剩余" + (510 - count) +"只鸭子。");
            }
        }
    }

    /**
     * 计算出发时所赶鸭子的总数
     * @param num 经过的村子数
     * @return 出发时鸭子的总数
     */
    public static int saleDuck(int num) {
        // 经过第7个村子后剩余2只鸭子
        if (num == 7) {
            return 2;
        } else {
            return 2 * (saleDuck(num + 1) + 1);
        }
    }
}

运行效果如下:

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java:利用递归方法求鸭子数 的相关文章

随机推荐