python之递归
文章目录
- 前言
- 一、递归是什么?
- 二、递归用在哪些方面
- 三、递归的思想
- 总结
前言
结合网上的示例,自己总结一下递归。
一、递归是什么?
在讲解“递归”这个抽象概念之前,让我们来重温一下昔日往事。小时候,当我们在缠着长辈讲故事时,长辈们可能就用下面的故事来“忽悠”我们:
从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事!故事是什么呢?从前有座山,山里有座庙,庙里有个老和尚正在给小和尚讲故事!故事是什么呢……
除非讲故事的人自己停下来不讲了,不然这个故事可以“无限”讲下去,原因就是“故事”嵌套的“故事”就是“故事”本身,这就是语言上“递归”的例子。但是,由于这个故事并没有一个终止的条件,因此,它实际上是陷入了一种有头无尾的死循环,因此并不符合程序设计领域中定义的“递归”。
那么在Python中递归就是一个函数内部可以自己调用自己(包括直接调用自己,间接调用自己)。
二、递归用在哪些方面
1、数学计算
在数学计算中,最常见的就是求阶乘。例如:5!=5*4*3*2*1
2、处理字符串
在字符串中常见的就是用于查找字符串
三、递归的思想
递归其实是一种逆向思维,就如同我要证明10>1,但是我现在证明不了,那我就证明2>1,这样就反向证明了10>1。
递归也会通过调用不断地把问题缩小,直到遇到一个简单的可以直接解决的基准情况。核心思想就是把一个大的问题,逐步的划成一个小范围,再从这个小范围里面,又继续划一个小范围。直到逼近最适合的答案。
举例:
1. 在列表中查找元素
假设我们要在一个列表中查找一个特定的元素,可以使用递归:
# 函数说明,lst是一个装有元素的列表,target是目标元素
def recursive_search(lst, target, index=0):
# 基本情况:如果索引超出列表长度,则返回None
if index == len(lst):
return None
# 检查当前元素是否为目标元素
if lst[index] == target:
return index
# 递归调用,继续在列表的下一个元素中查找
return recursive_search(lst, target, index + 1)
# 示例
lst = [1, 2, 3, 4, 5]
target = 3
print(recursive_search(lst, target)) # 输出: 2
2. 在二叉树中查找元素
在二叉树中查找一个元素,也可以使用递归:
# 示例二叉树结构
# 4
# / \
# 2 6
# / \
# 1 3
class TreeNode:
def __init__(self, value=0, left=None, right=None):
self.value = value
self.left = left
self.right = right
def search_in_bst(root, target):
# 基本情况:如果树为空,返回None
if root is None:
return None
# 检查当前节点值是否为目标值
if root.value == target:
return root
# 如果目标值小于当前节点值,递归在左子树中查找
elif target < root.value:
return search_in_bst(root.left, target)
# 如果目标值大于当前节点值,递归在右子树中查找
else:
return search_in_bst(root.right, target)
# 示例二叉树结构
# 4
# / \
# 2 6
# / \
# 1 3
root = TreeNode(4, left=TreeNode(2, left=TreeNode(1), right=TreeNode(3)),
right=TreeNode(value=6, left=None, right=None))
print(search_in_bst(root, 4).value) # 输出: 3
额外知识:
类的参数中的值,可以传入自己类的初始化参数。
引用文档:
https://zhuanlan.zhihu.com/p/158300209
百度安全验证
百度安全验证
总结
提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。