递归函数python经典例子
递归函数是一种非常重要的编程技巧,它可以让我们在编写程序时更加高效和简洁。在Python中,递归函数的使用非常广泛,下面我们来看一些经典的例子。
1. 阶乘函数
阶乘函数是递归函数的经典例子之一。它的定义如下:
```
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
```
这个函数的作用是计算n的阶乘。当n等于0时,返回1;否则,返回n乘以n-1的阶乘。
2. 斐波那契数列
斐波那契数列也是递归函数的经典例子之一。它的定义如下:
```
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
```
这个函数的作用是计算斐波那契数列的第n项。当n等于0时,返回0;当n等于1时,返回1;否则,返回斐波那契数列的第n-1项和第n-2项的和。
3. 汉诺塔问题
汉诺塔问题也是递归函数的经典例子之一。它的定义如下:
```
def hanoi(n, A, B, C):
if n == 1:
print(A, "->", C)
else:
hanoi(n-1, A, C, B)
print(A, "->", C)
hanoi(n-1, B, A, C)
```
快速排序python实现 这个函数的作用是解决汉诺塔问题。当n等于1时,直接将A柱子上的盘子移动到C柱子上;否则,先将A柱子上的n-1个盘子移动到B柱子上,然后将A柱子上的最后一个盘子移动到C柱子上,最后将B柱子上的n-1个盘子移动到C柱子上。
4. 二分查
二分查也是递归函数的经典例子之一。它的定义如下:
```
def binary_search(arr, low, high, x):
if high >= low:
mid = (high + low) // 2
if arr[mid] == x:
return mid
elif arr[mid] > x:
return binary_search(arr, low, mid-1, x)
else:
return binary_search(arr, mid+1, high, x)
else:
return -1
```
这个函数的作用是在有序数组arr中查元素x。如果到了,返回元素的下标;否则,返回-1。函数使用了递归的方式,每次将数组分成两半,然后在其中一半中查元素x。
5. 快速排序
快速排序也是递归函数的经典例子之一。它的定义如下:
```
def quick_sort(arr):
if len(arr) <= 1:
return arr
else:
pivot = arr[0]
left = [x for x in arr[1:] if x < pivot]
right = [x for x in arr[1:] if x >= pivot]
return quick_sort(left) + [pivot] + quick_sort(right)
```
这个函数的作用是对数组arr进行快速排序。函数使用了递归的方式,每次选择一个基准元素,将数组分成两部分,然后对每一部分进行快速排序。
6. 树的遍历
树的遍历也是递归函数的经典例子之一。它的定义如下:
```
class TreeNode:
def __init__(self, val=0, left=None, right=None):
self.val = val
self.left = left
self.right = right
def preorder_traversal(root):
if root:
print(root.val)
preorder_traversal(root.left)
preorder_traversal(root.right)
def inorder_traversal(root):
if root:
inorder_traversal(root.left)
print(root.val)
inorder_traversal(root.right)
def postorder_traversal(root):
if root:
postorder_traversal(root.left)
postorder_traversal(root.right)
print(root.val)
```
这个函数的作用是对树进行前序遍历、中序遍历和后序遍历。函数使用了递归的方式,每次先遍历根节点,然后遍历左子树和右子树。
7. 判断回文字符串
判断回文字符串也是递归函数的经典例子之一。它的定义如下:
```
def is_palindrome(s):
if len(s) <= 1:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论