递归函数python经典例子

  • 格式:docx
  • 大小:4.51 KB
  • 文档页数:7

递归函数python经典例子

递归函数是一种在函数定义中使用自身的方法。它在编程中被广泛使用,可以解决许多问题。下面将列举一些经典的递归函数示例,以展示其在不同领域的应用。

1. 阶乘函数

阶乘函数是递归函数的典型示例。它用来计算一个非负整数的阶乘。阶乘定义为n! = n * (n-1) * (n-2) * ... * 1,其中0的阶乘定义为1。下面是一个计算阶乘的递归函数示例:

```python

def factorial(n):

if n == 0:

return 1

else:

return n * factorial(n-1)

```

2. 斐波那契数列

斐波那契数列是一个经典的递归函数示例。它是一个无穷序列,每个数字都是前两个数字之和。下面是一个计算斐波那契数列的递归函数示例:

```python def fibonacci(n):

if n <= 1:

return n

else:

return fibonacci(n-1) + fibonacci(n-2)

```

3. 列表求和

列表求和是一个递归函数的常见应用。它递归地将列表中的每个元素相加,直到列表为空。下面是一个计算列表求和的递归函数示例:

```python

def list_sum(lst):

if len(lst) == 0:

return 0

else:

return lst[0] + list_sum(lst[1:])

```

4. 链表反转

链表反转是一个常见的递归问题。它递归地将链表中的每个节点反转,使链表的尾部成为头部,头部成为尾部。下面是一个链表反转的递归函数示例:

```python

class ListNode:

def __init__(self, val=0, next=None):

self.val = val

self.next = next

def reverse_list(head):

if head is None or head.next is None:

return head

else:

new_head = reverse_list(head.next)

head.next.next = head

head.next = None

return new_head

```

5. 二叉树遍历

二叉树遍历是一个常见的递归问题。它递归地遍历二叉树的左子树、根节点和右子树。下面是一个二叉树中序遍历的递归函数示例:

```python

class TreeNode:

def __init__(self, val=0, left=None, right=None):

self.val = val self.left = left

self.right = right

def inorder_traversal(root):

result = []

if root:

result.extend(inorder_traversal(root.left))

result.append(root.val)

result.extend(inorder_traversal(root.right))

return result

```

6. 字符串反转

字符串反转是一个常见的递归问题。它递归地将字符串中的每个字符反转,使字符串的尾部成为头部,头部成为尾部。下面是一个字符串反转的递归函数示例:

```python

def reverse_string(s):

if len(s) <= 1:

return s

else:

return reverse_string(s[1:]) + s[0]

```

7. 图的深度优先遍历

图的深度优先遍历是一个常见的递归问题。它递归地遍历图的每个节点,直到遍历完所有节点。下面是一个图的深度优先遍历的递归函数示例:

```python

def dfs(graph, start, visited=None):

if visited is None:

visited = set()

visited.add(start)

for neighbor in graph[start]:

if neighbor not in visited:

dfs(graph, neighbor, visited)

return visited

```

8. 汉诺塔问题

汉诺塔问题是一个经典的递归问题。它递归地将一堆盘子从一个柱子移动到另一个柱子,遵循某些规则:每次只能移动一个盘子,且大盘子不能放在小盘子上面。下面是一个汉诺塔问题的递归函数示例:

```python def hanoi(n, source, target, auxiliary):

if n > 0:

hanoi(n-1, source, auxiliary, target)

print("Move disk", n, "from", source, "to", target)

hanoi(n-1, auxiliary, target, source)

```

9. 排列组合

排列组合是一个常见的递归问题。它递归地生成给定元素的所有排列组合。下面是一个生成排列组合的递归函数示例:

```python

def permutations(nums):

if len(nums) == 0:

return [[]]

else:

result = []

for i in range(len(nums)):

remaining = nums[:i] + nums[i+1:]

for perm in permutations(remaining):

result.append([nums[i]] + perm)

return result

```

10. 二分搜索

二分搜索是一个常见的递归问题。它递归地在一个有序数组中查找目标元素,通过将数组分成两半并判断目标元素在哪一半中来进行搜索。下面是一个二分搜索的递归函数示例:

```python

def binary_search(nums, target, low, high):

if low > high:

return -1

else:

mid = (low + high) // 2

if nums[mid] == target:

return mid

elif nums[mid] > target:

return binary_search(nums, target, low, mid-1)

else:

return binary_search(nums, target, mid+1, high)

```

以上是一些经典的递归函数示例,它们展示了递归在不同领域的应用。通过理解和学习这些示例,我们可以更好地掌握递归的概念和用法,并将其应用于解决实际问题中。