A30525. 数学游戏校园里流行一种新的数学游戏:每次邀请两个同学参加,第一个同学先从1和2中挑一个数字,第二个同学可以在对方的基础上选择加1或者加2,然后又轮到第一个同学,他也可以选择加1或者加2,之后再把选择权交给对方,就这样交替地选择加1或者加2,谁先加到20,谁就赢了。小智编写了以下程序,分析总共存在多少种可能出现的情形。请补充完成该程序。def act(n): if n==1 or ____①___…
填空题
较难
知识点
题目描述
数学游戏
校园里流行一种新的数学游戏:每次邀请两个同学参加,第一个同学先从1和2中挑一个数字,第二个同学可以在对方的基础上选择加1或者加2,然后又轮到第一个同学,他也可以选择加1或者加2,之后再把选择权交给对方,就这样交替地选择加1或者加2,谁先加到20,谁就赢了。小智编写了以下程序,分析总共存在多少种可能出现的情形。请补充完成该程序。
def act(n):
if n==1 or ____①____:
return 1
sn = ____②_____
return____③____
tn = act(____④____)
print("总共存在%d种可能出现的情形。"%tn)
参考答案
def act(n):
if n == 1 or n == 2:
return 1
sn = act(n - 1) + act(n - 2)
return sn
tn = act(20)
print("总共存在%d 种可能出现的情形。"%tn)答案解析
①处应填入 n==2:
解析:题目中说明第一个同学先从 1 和 2 中挑一个数字,当当前数字为 1 或 2 时,只有一种可能出现的情形,所以这里判断当`n`等于 1 或 2 时返回 1。
②处应填入 act(n - 1) + act(n - 2):
解析:对于当前数字`n`,可以从`n - 1`通过加 1 到达`n`,也可以从`n - 2`通过加 2 到达`n`,所以到达`n`的情形数等于到达`n - 1`的情形数加上到达`n - 2`的情形数,通过递归调用`act(n - 1)`和`act(n - 2)`来实现。
③处应填入 sn:
解析:将计算得到的到达当前数字`n`的情形数`sn`返回。
④处应填入 20:
解析:最终目的是计算到达数字 20 有多少种可能出现的情形,所以调用`act`函数时传入参数 20。
上一题
下一题