用 Python 实现的康托尔集递归函数
·
你选中的代码是一个用Python递归实现康托尔集的完整程序,主要功能是生成并展示不同深度的康托尔集区间,并验证其数学特性。下面是对代码的详细解释:
1. 核心递归函数 cantor()
def cantor(start, end, depth, max_depth):
"""
递归生成康托尔集
参数:
start: 区间起始值
end: 区间结束值
depth: 当前递归深度
max_depth: 最大递归深度
返回:
包含康托尔集区间的列表
"""
# 递归终止条件:达到最大深度时返回当前区间
if depth == max_depth:
return [(start, end)]
# 计算三等分点
segment = (end - start) / 3
left_end = start + segment
right_start = end - segment
# 递归处理左右两个子区间(中间区间被移除)
left_intervals = cantor(start, left_end, depth + 1, max_depth)
right_intervals = cantor(right_start, end, depth + 1, max_depth)
# 合并左右区间结果
return left_intervals + right_intervals
工作原理:
- 康托尔集的构造规则是将区间三等分后移除中间部分,对剩余两个区间重复同样操作
- 递归终止条件:当当前深度等于最大深度时,返回当前区间作为基本情况
- 递归步骤:
- 将当前区间 [start, end] 三等分,计算分割点
- 对左侧区间 [start, left_end] 和右侧区间 [right_start, end] 分别递归
- 合并两个递归结果,形成当前深度的康托尔集区间列表
2. 辅助打印函数 print_cantor()
def print_cantor(intervals, depth):
"""打印指定深度的康托尔集区间"""
print(f"深度 {depth}:")
for i, (s, e) in enumerate(intervals, 1):
print(f" 区间 {i}: [{s:.6f}, {e:.6f}]")
print()
功能:
- 格式化输出指定深度的所有区间
- 每个区间保留6位小数,清晰展示区间范围
- 为每个深度的结果添加标题,便于观察构造过程
3. 主程序部分
if __name__ == "__main__":
# 初始区间为[0, 1],设置最大递归深度
max_depth = 4
initial_start, initial_end = 0.0, 1.0
print(f"康托尔集递归构造过程 (最大深度: {max_depth})\n")
# 展示不同深度的康托尔集
for d in range(max_depth + 1):
intervals = cantor(initial_start, initial_end, 0, d)
print_cantor(intervals, d)
# 计算康托尔集在指定深度的总长度
final_intervals = cantor(initial_start, initial_end, 0, max_depth)
total_length = sum(end - start for start, end in final_intervals)
print(f"深度 {max_depth} 时的总长度: {total_length:.6f}")
print(f"理论总长度: (2/3)^{max_depth} = {(2/3)**max_depth:.6f}")
执行流程:
- 设置初始参数:从区间 [0, 1] 开始,最大递归深度为4
- 循环生成并打印从深度0到深度4的康托尔集区间:
- 深度0:仅包含初始区间 [0, 1]
- 深度1:包含 [0, 1/3] 和 [2/3, 1] 两个区间
- 深度n:包含 2ⁿ 个区间
- 验证数学特性:计算最终深度的总长度,并与理论值 (2/3)ⁿ 对比,验证实现的正确性
代码特点
- 递归逻辑清晰地体现了康托尔集的自相似性
- 通过多深度展示,直观呈现了分形结构的形成过程
- 包含数学验证部分,确保实现符合康托尔集的理论特性
运行这段代码,你可以清晰看到康托尔集如何通过不断细分和移除中间部分而逐步形成,以及其总长度如何随深度增加而按 (2/3)ⁿ 规律递减。
更多推荐


所有评论(0)