资源简介 / 让教学更有效 精品试卷 | 信息第10课 课后练习(答案版 · 教师用)班级:____________ 姓名:____________ 得分:__________一、填空(每空 3 分,共 24 分)1.递归函数必须包含两个要素:______________ 和 ______________。2.阶乘的递归公式是:fact(n) = n × ______________。3.阶乘递归的出口应写成:if n == ______: return ______。4.求 1+2+…+n 的递归写法中,出口是 n == 1 时返回 ______。5.斐波那契数列的前两项都是 ______;从第三项起,每一项等于 ______________。6.如果递归忘记写出口,程序会报 ______________ 错误。二、判断对错(每题 3 分,共 12 分)1.递归就是函数在内部调用自己。( )2.递归函数可以没有出口,只要问题足够简单。( )3.递归的执行过程是「先一层层往里调用,再一层层往外返回」。( )4.用递归和用循环都能解决的问题,递归一定更快。( )三、手算模拟题(16 分)第 1 题 展开 fact(4) 的计算过程(fact 为阶乘函数)。fact(4) = 4 * fact(3)= 4 * (3 * fact(2))= ...请补完:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________最终 fact(4) = ______。第 2 题 下面程序的输出是什么?def f(n):if n <= 1:return 1return n + f(n - 1)print(f(5))调用 展开 结果f(1)f(2)f(3)f(5)输出结果:______四、★ 补全代码(每空 5 分,共 20 分)第 1 题 递归求阶乘。def fact(n):if n == ①______:return 1return n * ②______________print(fact(5))第 2 题 递归求 1+2+…+n。def total(n):if n == 1:return ③______return n + ④______________print(total(10))① ______ ② ______ ③ ______ ④ ______五、★★ 提高题(每题 10 分,共 30 分)第 1 题 递归与循环的对比用递归和用循环分别求 1×2×…×n,把两段代码都写出来,并说明在 n = 10 时两者结果是否相同。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________第 2 题 递归求各位数字之和写一个递归函数 digit_sum(n),求一个正整数的各位数字之和。例如 digit_sum(12345) 应返回 1+2+3+4+5 = 15。提示:n % 10 取出个位,n // 10 去掉个位。______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________第 3 题 读程序写结果def g(n):if n == 0:return 0return n % 10 + g(n // 10)print(g(708))输出结果:______。请写出 g(708) 的三次调用展开过程:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________六、★★★ 挑战题(每题 12 分,共 24 分)第 1 题 斐波那契递归用递归求第 n 项斐波那契数(前两项都为 1),输出前 15 项。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________思考题(附加 5 分):把 n 改成 35 再运行一次,你观察到什么现象?请写下你的猜测和理由。__________________________________________________________________________________________________________________________________________________________________________________________第 2 题 递归求最大公约数(进阶)辗转相除法的规则是:gcd(a, b) = gcd(b, a % b),当 b 为 0 时结果是 a。请用递归实现并测试 gcd(48, 36) 与 gcd(100, 75)。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________教师评语:____________________________________________________________________________________________________________________________________第 10 课 参考答案(教师用)与《教师参考答案》册同源,全部数值均已实际运行核验一、填空1.终止条件(出口)、递归调用 2.fact(n - 1) 3.1、1 4.15.1、前两项之和 6.RecursionError(递归深度超出)二、判断对错1.√ 2.×(没有出口一定会无限递归报错) 3.√ 4.×(递归通常比循环慢,且占内存)三、手算模拟题第 1 题:fact(4) = 4 * fact(3)= 4 * (3 * fact(2))= 4 * (3 * (2 * fact(1)))= 4 * 3 * 2 * 1 = 24第 2 题:f(n) = n + f(n-1),出口 f(1) = 1。调用 展开 结果f(1) — 1f(2) 2 + f(1) 3f(3) 3 + f(2) 6f(5) 5 + 4 + 3 + 2 + 1 15四、★ 补全代码① 1 ② fact(n - 1) ③ 1 ④ total(n - 1)五、★★ 提高题第 1 题:递归版 n * fact(n-1);循环版用 ans = 1; for i in range(1, n+1): ans *= i。n = 10 时两者结果都是 3628800,完全相同。第 2 题:def digit_sum(n):if n < 10:return nreturn n % 10 + digit_sum(n // 10)第 3 题:输出 15。展开过程:g(708) = 8 + g(70)g(70) = 0 + g(7)g(7) = 7 + g(0) = 7→ g(70) = 0 + 7 = 7→ g(708) = 8 + 7 = 15六、★★★ 挑战题第 1 题:def fib(n):if n == 1 or n == 2:return 1return fib(n - 1) + fib(n - 2)for i in range(1, 16):print(fib(i), end=" ")思考题:n = 35 时会非常慢(要等很久)。原因是递归会重复计算大量相同的项——fib(30) 在算 fib(35) 的过程中被重复调用了很多次,指数量级增长。第 2 题:def gcd(a, b):if b == 0:return areturn gcd(b, a % b)print(gcd(48, 36)) # 12print(gcd(100, 75)) # 2521世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)21世纪教育网(www.21cnjy.com)/ 让教学更有效 精品试卷 | 信息第10课 课后练习(学生用)班级:____________ 姓名:____________ 得分:__________一、填空(每空 3 分,共 24 分)1.递归函数必须包含两个要素:______________ 和 ______________。2.阶乘的递归公式是:fact(n) = n × ______________。3.阶乘递归的出口应写成:if n == ______: return ______。4.求 1+2+…+n 的递归写法中,出口是 n == 1 时返回 ______。5.斐波那契数列的前两项都是 ______;从第三项起,每一项等于 ______________。6.如果递归忘记写出口,程序会报 ______________ 错误。二、判断对错(每题 3 分,共 12 分)1.递归就是函数在内部调用自己。( )2.递归函数可以没有出口,只要问题足够简单。( )3.递归的执行过程是「先一层层往里调用,再一层层往外返回」。( )4.用递归和用循环都能解决的问题,递归一定更快。( )三、手算模拟题(16 分)第 1 题 展开 fact(4) 的计算过程(fact 为阶乘函数)。fact(4) = 4 * fact(3)= 4 * (3 * fact(2))= ...请补完:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________最终 fact(4) = ______。第 2 题 下面程序的输出是什么?def f(n):if n <= 1:return 1return n + f(n - 1)print(f(5))调用 展开 结果f(1)f(2)f(3)f(5)输出结果:______四、★ 补全代码(每空 5 分,共 20 分)第 1 题 递归求阶乘。def fact(n):if n == ①______:return 1return n * ②______________print(fact(5))第 2 题 递归求 1+2+…+n。def total(n):if n == 1:return ③______return n + ④______________print(total(10))① ______ ② ______ ③ ______ ④ ______五、★★ 提高题(每题 10 分,共 30 分)第 1 题 递归与循环的对比用递归和用循环分别求 1×2×…×n,把两段代码都写出来,并说明在 n = 10 时两者结果是否相同。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________第 2 题 递归求各位数字之和写一个递归函数 digit_sum(n),求一个正整数的各位数字之和。例如 digit_sum(12345) 应返回 1+2+3+4+5 = 15。提示:n % 10 取出个位,n // 10 去掉个位。______________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________第 3 题 读程序写结果def g(n):if n == 0:return 0return n % 10 + g(n // 10)print(g(708))输出结果:______。请写出 g(708) 的三次调用展开过程:________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________六、★★★ 挑战题(每题 12 分,共 24 分)第 1 题 斐波那契递归用递归求第 n 项斐波那契数(前两项都为 1),输出前 15 项。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________思考题(附加 5 分):把 n 改成 35 再运行一次,你观察到什么现象?请写下你的猜测和理由。__________________________________________________________________________________________________________________________________________________________________________________________第 2 题 递归求最大公约数(进阶)辗转相除法的规则是:gcd(a, b) = gcd(b, a % b),当 b 为 0 时结果是 a。请用递归实现并测试 gcd(48, 36) 与 gcd(100, 75)。____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________教师评语:____________________________________________________________________________________________________________________________________21世纪教育网 www.21cnjy.com 精品试卷·第 2 页 (共 2 页)21世纪教育网(www.21cnjy.com) 展开更多...... 收起↑ 资源列表 第10课 函数与递归——自己调用自己课后练习(学生用).docx 第十课课后练习(答案版).docx