A30524. 乘客问题某路公共汽车,总共有八站,从一号站发车时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘,到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个!…,到了终点站车上还有乘客6人问发车时车上的乘客有多少?根据递归思想,编写自定义函数完成该程序功能,完善空白处代码。def num(i): if i == 8: return ___…
题目描述
乘客问题
某路公共汽车,总共有八站,从一号站发车时车上已有n位乘客,到了第二站先下一半乘客,再上来了六位乘,到了第三站也先下一半乘客,再上来了五位乘客,以后每到一站都先下车上已有的一半乘客,再上来了乘客比前一站少一个!…,到了终点站车上还有乘客6人问发车时车上的乘客有多少?根据递归思想,编写自定义函数完成该程序功能,完善空白处代码。
def num(i):
if i == 8:
return _____①_____
else:
return _____②_____
print(_____③_____)
参考答案
def num(i):
if i == 8:
return 6
else:
return (num(i + 1) - (8 - i)) * 2
print(num(2))答案解析
①处应填入 6:
解析:当`i == 8`时,也就是到了终点站,已知终点站车上还有乘客 6 人,所以返回 6。
②处应填入 (num(i + 1) - (8 - i)) * 2:
解析:每到一站,先下一半乘客,再上来比前一站少一个乘客。如果下一站(`i + 1`)的人数是`num(i + 1)`,那么当前站(`i`)的人数应该是`((下一站人数 - 当前站上来的乘客数) * 2)`,当前站上来的乘客数是`8 - i`(因为每站上来的乘客比前一站少一个,从第二站开始,第二站上来 6 个,第三站上来 5 个……第八站上来 1 个,所以第`i`站上来的是`8 - i`个),所以这里返回`(num(i + 1) - (8 - i)) * 2`。
③处应填入 num(2):
解析:从第二站开始调用函数计算发车时车上的乘客数,因为题目中从一号站发车时车上已有`n`位乘客,但实际上在函数中是从第二站开始递归计算的,所以这里传入参数 2 调用`num`函数,最后计算出的结果也就是从第一站发车时车上的乘客数。