测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

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`函数,最后计算出的结果也就是从第一站发车时车上的乘客数。


上一题 下一题