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