定义
函数调用函数自身,这种方式称为递归,这种函数称为递归函数
递归函数使用过程中,需要找到
不变的规律
和停止递归的边界条件
,因为函数自身调用自身,函数本身的结构不变,只是
每次传的参数改变
啦递归实现过程(扩展):利用栈的思想,先找边界条件,同时将后面的任务存起来,一直到最前面的边界条件,然后回去,每次从栈中取任务,进行计算,一直到最后一个任务取完,结果也计算完毕
递归过程:
- 递归前进段
- 递归边界条件
- 递归返回段
案例讲解
递归实现吸烟问题
吸烟有危害,不仅仅危害人体健康,还会对社会产生不良的影响。吸烟还很容易引起喉头炎、气管炎,肺气肿等问题; 那么现在假设人一生抽烟10000根达到极限峰值,再抽一根烟就像压倒骆驼的最后一根稻草,会使人体爆发疾病问题; 每天一个人抽烟的个数都比前天多一根(第一天抽一根),且一周只有工作日(周一~周五)会吸烟; 请使用递归的方式求出一个人按照以上方式抽烟达到10000根,爆发疾病需要历经多少天
def smoker(day, count, amount):
"""
递归解决吸烟问题
:param day: 当前的天数
:param count: 当天的吸烟数量
:param amount: 总计的吸烟数量
:return: 吸到10000根烟的天数
"""
if amount >= 10000:
# 如果吸烟总数大于10000, 返回天数
return day
else:
day += 1 # 每吸一次烟,天数加1
if day % 7 != 6 and day % 7 != 0:
# 只有周六,周日不吸烟,判断不是周六,也不是周日
count += 1 # 当天吸烟的数量
amount += count # 目前为止,吸烟的总数量
return smoker(day, count, amount)
print(smoker(1, 1, 1)) # 第1天,吸了1根烟,总共吸了1根烟