第 06 章 · 递归习题 · PYTHON
递归习题
15 道递归算法专项练习题,覆盖递归求值、递归遍历、递归分治等经典场景。
展开全部答案
📝 递归习题
15 道递归算法专项练习 · 分 2 页
1
递归求年龄:5人坐一起,第5人比第4人大2岁,第4人比第3人大2岁……第1人10岁。求第5人年龄。
📝 样例输入: n = 5
▶ 运行结果: 第五个人: 18
▼
参考答案
python
def age(n):
if n == 1:
return 10
return age(n - 1) + 2
print("第五个人:", age(5)) # 182
使用递归打印从 1 到 n 的数字。
📝 样例输入: n = 10
▶ 运行结果: 1 2 3 4 5 6 7 8 9 10
▼
参考答案
python
def print_num(n):
if n > 0:
print_num(n - 1)
print(n, end=' ')
print_num(10) # 1 2 3 4 5 6 7 8 9 103
递归反转字符串:将输入的字符串用递归方法反转。
📝 样例输入: "hello"
▶ 运行结果: olleh
▼
参考答案
python
def reverse_string(s):
if len(s) <= 1:
return s
return reverse_string(s[1:]) + s[0]
print(reverse_string("hello")) # olleh4
递归求斐波那契数列第 n 项的值。
📝 样例输入: n = 10
▶ 运行结果: 55
▼
参考答案
python
def fibonacci(n):
if n == 1 or n == 2:
return 1
return fibonacci(n - 1) + fibonacci(n - 2)
print(fibonacci(10)) # 555
递归判断一个整数 n 是否是 2 的幂次方。
📝 样例输入: 16, 15
▶ 运行结果: True
False
▼
参考答案
python
def is_power_of_two(n):
if n <= 0:
return False
elif n == 1:
return True
elif n % 2 != 0:
return False
return is_power_of_two(n // 2)
print(is_power_of_two(16)) # True
print(is_power_of_two(15)) # False6
递归乘法:实现两个正整数的乘法,不能使用
* 运算符。📝 样例输入: 3, 5
▶ 运行结果: 15
▼
参考答案
python
def multiply(a, b):
if b == 0:
return 0
elif b == 1:
return a
return a + multiply(a, b - 1)
print(multiply(3, 5)) # 157
递归将十进制数转换为二进制字符串。
📝 样例输入: 10
▶ 运行结果: 1010
▼
参考答案
python
def dec_to_bin(n):
if n == 0:
return "0"
elif n == 1:
return "1"
return dec_to_bin(n // 2) + str(n % 2)
print(dec_to_bin(10)) # 10108
递归求数组元素之和。
📝 样例输入: [1, 2, 3, 4, 5]
▶ 运行结果: 15
▼
参考答案
python
def array_sum(arr):
if len(arr) == 0:
return 0
return arr[0] + array_sum(arr[1:])
print(array_sum([1, 2, 3, 4, 5])) # 159
递归计算整数各位数字之和。
📝 样例输入: 12345
▶ 运行结果: 15
▼
参考答案
python
def digit_sum(n):
if n < 10:
return n
return n % 10 + digit_sum(n // 10)
print(digit_sum(12345)) # 1510
递归判断字符串是否为回文。
📝 样例输入: "aba", "abc"
▶ 运行结果: True
False
▼
参考答案
python
def is_palindrome(s):
if len(s) <= 1:
return True
if s[0] != s[-1]:
return False
return is_palindrome(s[1:-1])
print(is_palindrome("aba")) # True
print(is_palindrome("abc")) # False11
求 1! + 2! + 3! + ... + 20! 的和(递归实现阶乘)。
📝 样例输入: n = 20
▶ 运行结果: 2561327494111820313
▼
参考答案
python
def factorial(n):
if n <= 1:
return 1
return n * factorial(n - 1)
total = sum(factorial(i) for i in range(1, 21))
print(total) # 256132749411182031312
猴子吃桃(递归):每天吃一半多一个,第10天剩1个,求最初有多少?
📝 样例输入: day = 1(第1天)
▶ 运行结果: 1534
▼
参考答案
python
def peach(day):
if day == 10:
return 1
return (peach(day + 1) + 1) * 2
print(peach(1)) # 153413
汉诺塔:3根柱子A、B、C,将A上n个圆盘移到C,每次移一个,大盘不能在小盘上面。输出移动步骤。
📝 样例输入: n = 3, A, B, C
▶ 运行结果: 第1个盘子:A --> C
第2个盘子:A --> B
第1个盘子:C --> B
第3个盘子:A --> C
第1个盘子:B --> A
第2个盘子:B --> C
第1个盘子:A --> C
▼
参考答案
python
def hanoi(n, a, b, c):
if n == 1:
print(f"第1个盘子:{a} --> {c}")
return
hanoi(n - 1, a, c, b)
print(f"第{n}个盘子:{a} --> {c}")
hanoi(n - 1, b, a, c)
hanoi(3, 'A', 'B', 'C')14
递归阶乘求和:计算 1! + 2! + ... + 10!。
📝 样例输入: n = 10
▶ 运行结果: 4037913
▼
参考答案
python
def factor(n):
if n < 2:
return 1
return n * factor(n - 1)
s = sum(factor(i) for i in range(1, 11))
print(s) # 403791315
递归倒序输出:利用递归将输入的字符以相反顺序打印。
📝 样例输入: hello
▶ 运行结果: 请输入字符:hello
olleh
▼
参考答案
python
def print_reverse(chars, idx=0):
if idx >= len(chars):
return
print_reverse(chars, idx + 1)
print(chars[idx], end="")
s = input("请输入字符:")
print_reverse(s)
第 1 / 2 页