【算法入门-Python】02_递归

一、递归

递归的两个特点:调用自身;结束条件。

python 复制代码
def func1(x):
    print(x)
    func1(x-1)

没有结束条件,si递归。不是递归。

python 复制代码
def func2(x):
	if x > 0:
        print(x)
        func2(x+1)

递归调用的x+1,没有结束条件。不是递归

python 复制代码
def func3(x):
    if x > 0:
    	print(x)
        func3(x-1)

是递归。打印123

如下图:先打印,后递归。从上往下123

python 复制代码
def func4(x):
	if x > 0:
        func4(x-1)
        print(x)

func3一样,只是打印位置不同。是递归。打印321

如下图:先递归,后打印。从上往下321

递归实例:汉诺塔问题

问题:

思路:

第一步和第三步是原问题的一个子问题

python 复制代码
# a,b,c表示三个盘子,这里原函数表示:起点为a,经过b,移动到c
def hanoi(n, a, b, c): 
    if n > 0:
        hanoi(n-1, a, c, b)
        print("moving from %s to %s" % (a, c))
        hanoi(n-1, b, a, c)
        
# test
hanoi(3, 'A', 'B', 'C')

汉诺塔移动次数递推式:h(x) = 2h(x-1) + 1

相关推荐
Kethy__2 分钟前
计算机中级-数据库系统工程师-数据结构-树与二叉树(1)
数据结构·算法··数据库系统工程师·计算机中级
小镇学者3 分钟前
【python】 macos 安装ffmpeg 命令行工具
python·macos·ffmpeg
电商API&Tina6 分钟前
【京东item_getAPI 】高稳定:API 、非爬虫、不封号、不掉线、大促稳跑
大数据·网络·人工智能·爬虫·python·sql·json
江沉晚呤时7 分钟前
深入理解 Akka.NET:高并发与分布式系统的利器
开发语言·c#·.net
环黄金线HHJX.8 分钟前
BaClaw龙虾打字
开发语言·人工智能·算法·编辑器
echome88813 分钟前
Go 语言并发编程:Channel 与 Goroutine 的完美结合
开发语言·后端·golang
O丶ne丨柒夜14 分钟前
Claude Code、Codex 常用命令和命令速查
python
AI科技星15 分钟前
光速螺旋量子几何统一场论:基于四维类时螺旋的物理现象统一推导
开发语言·线性代数·算法·数学建模·平面
weixin_4080996716 分钟前
身份证正反面合并+识别OCR接口调用
java·人工智能·后端·python·ocr·api·身份证ocr
We་ct17 分钟前
LeetCode 191. 位1的个数:两种解法详解
前端·算法·leetcode·typescript