📜  递归练习问题套装7(1)

📅  最后修改于: 2023-12-03 14:58:01.870000             🧑  作者: Mango

递归练习问题套装7

递归是一种函数调用自身的编程技巧。它在解决问题中非常有用,特别是对于那些需要重复执行相似任务的情况。递归可以让代码更简洁、更易读,但同时也需要小心使用,以避免进入无限循环或导致性能问题。

本问题套装7包含了一系列递归练习问题,旨在帮助程序员加深对递归的理解,并提供实践机会。每个问题都有相应的问题描述和一个或多个示例解答。


问题列表
  1. 阶乘
  2. 斐波那契数列
  3. 幂运算
  4. 列表求和
  5. 二叉树的高度
  6. 字符串反转
  7. 路径计数

1. 阶乘
问题描述

给定一个非负整数 n,计算其阶乘。

示例

输入:

n = 5

输出:

120
解答
def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n - 1)

2. 斐波那契数列
问题描述

计算斐波那契数列中第 n 个数。斐波那契数列定义如下:

  • 第一个数为 0
  • 第二个数为 1
  • 从第三个数开始,每个数都等于前两个数之和
示例

输入:

n = 6

输出:

8
解答
def fibonacci(n):
    if n <= 0:
        return 0
    elif n == 1:
        return 1
    else:
        return fibonacci(n - 1) + fibonacci(n - 2)

3. 幂运算
问题描述

给定一个浮点数 x 和一个整数 n,计算 xn 次幂。

示例

输入:

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)

4. 列表求和
问题描述

给定一个整数列表 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:])

5. 二叉树的高度
问题描述

给定一个二叉树的根节点,计算该二叉树的高度。

示例
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

6. 字符串反转
问题描述

给定一个字符串 s,反转该字符串。

示例

输入:

s = "Hello, World!"

输出:

"!dlroW ,olleH"
解答
def reverse_string(s):
    if len(s) <= 1:
        return s
    else:
        return reverse_string(s[1:]) + s[0]

7. 路径计数
问题描述

给定一个 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,其中包含了阶乘、斐波那契数列、幂运算、列表求和、二叉树的高度、字符串反转和路径计数等问题。这些问题为程序员提供了练习递归技巧的机会,旨在加深对递归的理解和应用。通过不断练习和探索,相信你会在递归的世界中获得更多的乐趣和启发!