Python递归函数的例子并加上注释
时间: 2023-06-04 21:02:31 浏览: 28
当然,我很乐意回答你的问题!以下是一个Python递归函数示例及其注释:
```
# 定义一个递归函数
def factorial(n):
# 如果n等于0或1,则返回1
if n == 0 or n == 1:
return 1
else:
# 递归调用并返回n乘以(n-1)的阶乘
return n * factorial(n-1)
# 调用递归函数并打印结果
print(factorial(5)) # 120
```
解释如下:
1. 首先,我们定义了一个名为“factorial”的递归函数,以计算给定数的阶乘。
2. 在函数中,我们检查n是否等于0或1,如果是,则直接返回1。
3. 如果n不等于0或1,则递归调用我们的函数,传递n-1作为参数,并将结果乘以n。这一步最终就是要求n的阶乘。
4. 当递归到n=1或n=0时,会开始一层一层地从递归中返回结果,直到最开始的函数调用也返回结果。
5. 最后,我们在主函数中调用递归函数,并打印计算出的结果。
希望这个示例有帮助,如果你有任何其他问题,请随时提出。
相关问题
递归回溯法求解0/1背包问题python语言完整代码加上注释
好的,以下是一份Python语言实现的递归回溯法求解0/1背包问题的完整代码,已经加上了注释说明:
```python
# 递归回溯法求解0/1背包问题
# 功能:给定物品重量列表和价值列表,背包容量,求能装入背包的最大价值
def knapsack(w, v, c):
"""
:param w: 一个列表,表示物品的重量
:param v: 一个列表,表示物品的价值
:param c: 背包的容量
:return: 能装入背包的最大价值
"""
n = len(w) # 物品个数
memo = [[-1] * (c + 1) for _ in range(n)] # 备忘录,用于记录之前计算过的状态
def dp(i, j):
"""
:param i: 当前考虑到第i个物品
:param j: 当前背包容量为j
:return: 能装入背包的最大价值
"""
if i == n: # 物品已经考虑完了
return 0
if memo[i][j] != -1: # 如果之前计算过,直接返回备忘录中的值
return memo[i][j]
res = dp(i + 1, j) # 不装第i个物品
if j >= w[i]: # 如果当前背包容量能装下第i个物品
res = max(res, v[i] + dp(i + 1, j - w[i])) # 装第i个物品
memo[i][j] = res # 记录备忘录
return res
return dp(0, c) # 从第0个物品开始考虑,背包容量为c
# 示例
w = [1, 2, 3] # 物品重量列表
v = [6, 10, 12] # 物品价值列表
c = 5 # 背包容量
print(knapsack(w, v, c)) # 输出结果:22
```
注释已经比较详细了,主要思路就是用递归回溯法,定义一个dp函数来求解能装入背包的最大价值,同时使用备忘录memo记录之前计算过的状态,避免重复计算。
用python 写归并排序,并进行注释
好的,这是一个关于归并排序的 Python 实现代码:
```python
def merge_sort(arr):
if len(arr) <= 1:
return arr
# 将 arr 分成左右两个部分
mid = len(arr) // 2
left_half = arr[:mid]
right_half = arr[mid:]
# 递归对左右两个部分进行排序
left_half = merge_sort(left_half)
right_half = merge_sort(right_half)
# 合并左右两个已经排好序的子序列
return merge(left_half, right_half)
def merge(left_half, right_half):
result = []
left_index = right_index = 0
# 比较左右两个子序列的元素,依次放入 result 中
while left_index < len(left_half) and right_index < len(right_half):
if left_half[left_index] < right_half[right_index]:
result.append(left_half[left_index])
left_index += 1
else:
result.append(right_half[right_index])
right_index += 1
# 如果左右两个子序列有剩余的元素,则将其全部放入 result 中
if left_index < len(left_half):
result.extend(left_half[left_index:])
if right_index < len(right_half):
result.extend(right_half[right_index:])
return result
# 测试代码
arr = [5, 2, 7, 1, 4, 3, 6]
sorted_arr = merge_sort(arr)
print(sorted_arr)
```
归并排序是一种基于分治思想的排序算法,它的主要思想是将一个大问题拆分成多个规模更小、结构相同的子问题,通过递归的方式求解子问题,最终将子问题的解合并为原问题的解。
在这个实现中,我们首先将输入的数组拆分成两个子序列,并递归地对每个子序列进行排序。然后,我们使用一个 `merge` 函数来合并这两个已经排好序的子序列。最终,我们得到的就是一个排好序的完整数组。
注释已经加在代码中,希望可以帮助你理解归并排序的实现过程。
相关推荐













