【算法入门-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

相关推荐
萌>__<新5 小时前
力扣打卡每日一题——缺失的第一个正数
数据结构·算法·leetcode
DuHz5 小时前
车对车对向交汇场景的毫米波路径损耗建模论文精读
论文阅读·算法·汽车·信息与通信·信号处理
一人の梅雨5 小时前
淘宝商品视频接口深度解析:从视频加密解密到多端视频流重构
java·开发语言·python
杼蛘5 小时前
XXL-Job工具使用操作记录
linux·windows·python·jdk·kettle·xxl-job
她说..5 小时前
MySQL数据处理(增删改)
java·开发语言·数据库·mysql·java-ee
BD_Marathon5 小时前
【JavaWeb】ServletContext_域对象相关API
java·开发语言
lxh01135 小时前
二叉树中的最大路径和
前端·算法·js
萌>__<新5 小时前
力扣打卡每日一题————零钱兑换
算法·leetcode·职场和发展
重生之后端学习5 小时前
238. 除自身以外数组的乘积
java·数据结构·算法·leetcode·职场和发展·哈希算法
qq_229058015 小时前
运行djando项目 配置启动类 label_studio包含前后端启动方法
python·django