📅  最后修改于: 2023-12-03 14:58:01.870000             🧑  作者: Mango
递归是一种函数调用自身的编程技巧。它在解决问题中非常有用,特别是对于那些需要重复执行相似任务的情况。递归可以让代码更简洁、更易读,但同时也需要小心使用,以避免进入无限循环或导致性能问题。
本问题套装7包含了一系列递归练习问题,旨在帮助程序员加深对递归的理解,并提供实践机会。每个问题都有相应的问题描述和一个或多个示例解答。
给定一个非负整数 n
,计算其阶乘。
输入:
n = 5
输出:
120
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n - 1)
计算斐波那契数列中第 n
个数。斐波那契数列定义如下:
输入:
n = 6
输出:
8
def fibonacci(n):
if n <= 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n - 1) + fibonacci(n - 2)
给定一个浮点数 x
和一个整数 n
,计算 x
的 n
次幂。
输入:
x = 2, n = 5
输出:
32
def power(x, n):
if n == 0:
return 1
elif n < 0:
return 1 / power(x, -n)
elif n % 2 == 0:
return power(x * x, n // 2)
else:
return x * power(x * x, n // 2)
给定一个整数列表 nums
,计算列表中所有元素的和。
输入:
nums = [1, 2, 3, 4, 5]
输出:
15
def list_sum(nums):
if len(nums) == 0:
return 0
else:
return nums[0] + list_sum(nums[1:])
给定一个二叉树的根节点,计算该二叉树的高度。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
# 1
# / \
# 2 3
# / \
# 4 5
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
输入:
root = TreeNode(1)
输出:
3
def tree_height(root):
if root is None:
return 0
else:
return max(tree_height(root.left), tree_height(root.right)) + 1
给定一个字符串 s
,反转该字符串。
输入:
s = "Hello, World!"
输出:
"!dlroW ,olleH"
def reverse_string(s):
if len(s) <= 1:
return s
else:
return reverse_string(s[1:]) + s[0]
给定一个 m x n
的网格,从左上角出发,每次只能向右或向下移动一步,到达右下角的路径有多少条?
输入:
m = 3, n = 2
输出:
3
def unique_paths(m, n):
if m == 1 or n == 1:
return 1
else:
return unique_paths(m - 1, n) + unique_paths(m, n - 1)
以上介绍了递归练习问题套装7,其中包含了阶乘、斐波那契数列、幂运算、列表求和、二叉树的高度、字符串反转和路径计数等问题。这些问题为程序员提供了练习递归技巧的机会,旨在加深对递归的理解和应用。通过不断练习和探索,相信你会在递归的世界中获得更多的乐趣和启发!