📅  最后修改于: 2023-12-03 15:28:22.600000             🧑  作者: Mango
递归是一种基本的算法思想,通过不断调用自身来解决问题。在许多编程语言中,递归是一种非常优美的实现方式,但也容易产生一些疑难杂症。本练习集旨在帮助程序员深入理解和掌握递归算法,并提高其在实际开发中的应用能力。
在开始练习之前,你需要掌握以下基本算法和数据结构:
如果你还不熟悉其中的某些知识点,可以先在其他教程中学习一下。
以下是一些递归练习题,按照难度递增的顺序排列。每个题目都附带了题意和代码框架,你需要完成代码并通过测试样例。
给定一个正整数n,编写递归函数print_star(int n),打印出n个'*'。
def print_star(n):
"""
:type n: int
:rtype: void
"""
# TODO: 在此处填写你的代码
print_star(5)
# 期望输出:
# *****
给定一个正整数n,编写递归函数factorial(int n),计算n的阶乘。
def factorial(n):
"""
:type n: int
:rtype: int
"""
# TODO: 在此处填写你的代码
return 0
print(factorial(5))
# 期望输出:
# 120
斐波那契数列是一个著名的数列,定义如下:
$$ F_0=0,F_1=1,F_n=F_{n-1}+F_{n-2}(n\geq2) $$
给定一个正整数n,编写递归函数fibonacci(int n),计算斐波那契数列的第n项。
def fibonacci(n):
"""
:type n: int
:rtype: int
"""
# TODO: 在此处填写你的代码
return 0
print(fibonacci(10))
# 期望输出:
# 55
给定一个字符串s,编写递归函数reverse_string(string s),将其反转并返回。
def reverse_string(s):
"""
:type s: str
:rtype: str
"""
# TODO: 在此处填写你的代码
return ""
print(reverse_string("hello world"))
# 期望输出:
# dlrow olleh
给定一个升序排列的整数数组,编写递归函数sorted_array_to_bst(int[] nums),将其转换为平衡二叉搜索树。
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def sorted_array_to_bst(nums):
"""
:type nums: List[int]
:rtype: TreeNode
"""
# TODO: 在此处填写你的代码
return None
root = sorted_array_to_bst([-10,-3,0,5,9])
print(root.val) # 0
print(root.left.val) # -3
print(root.right.val) # 9
print(root.left.left.val) # -10
print(root.right.left.val) # 5
递归是一种常用的算法思想,深入理解和掌握递归算法对程序员来说非常重要。通过完成以上练习,你可以熟悉递归算法的应用场景和实现方式,增强自己的算法能力。如果你想进一步提高自己的水平,可以尝试其他高级算法挑战和开源项目的贡献。