递归程序设计方法

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

1.题目分析
根据题目可知这个问题如果要求得最开始时的鸭子数必须知道每经过一个村子卖了多少只鸭子以及买完鸭子后剩余鸭子的数目。根据最后剩余的鸭子数通过逆序进行推导运算得到前经过时一个村子的鸭子数,最后得到刚开始时的鸭子数。因此本题可以使用递归方法进行运算。
2.算法构造
要使用递归的方法就必须设计递归函数的递归体和递归出口,根据题目可以推导出有如下递归表达式:
在这里插入图片描述
当经过的村子数大于0时,进行递归操作,得出经过前一个时村子的鸭子数,当村子数为0时停止递归,得到总的鸭子数。
3.算法实现
1、递归方法实现:使用python语言实现,设计了一个递归函数,一个主函数。主函数进行传参控制经过的村子数以及最后剩余的鸭子数。递归函数对总的鸭子数进行求解。
递归函数实现:

def sellduck(duck,village):
    """
    定义递归函数
    :param duck: 鸭子的数目
    :param village: 经过的村子数
    :return:对函数进行递归,返回鸭子的总数
    """
    if village>0:  # 函数的递归体

        duck = (duck+1)*2
        sell_duck = duck/2+1  # 经过每个村子卖掉的鸭子数
        print("经过第%s个村子共卖了%s只鸭子" % (village, sell_duck))
        return sellduck(duck, village-1)
    else:   # 递归的结束条件

        return  duck

主函数实现

def main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值