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

相关推荐
贩卖黄昏的熊7 分钟前
typescript 快速入门
开发语言·前端·javascript·typescript·ecmascript·es6
路边草随风18 分钟前
python 调用 spring ai sse mcp
人工智能·python·spring
菜鸟233号21 分钟前
力扣347. 前k个高频元素 java实现
算法
剪一朵云爱着33 分钟前
PAT 1164 Good in C
c语言·开发语言
LNN20221 小时前
Qt 5.8.0 下实现触摸屏热插拔功能的探索与实践(3)
开发语言·qt
移远通信1 小时前
配网-复杂场景
服务器·开发语言·php
Dr.Kun1 小时前
【鲲码园Python】基于pytorch的鸟品种分类系统(25类)
pytorch·python·分类
一只小bit1 小时前
Qt 快速开始:安装配置并创建简单标签展示
开发语言·前端·c++·qt·cpp
wadesir1 小时前
深入理解Rust静态生命周期(从零开始掌握‘static的奥秘)
开发语言·后端·rust
是有头发的程序猿1 小时前
Python爬虫实战:面向对象编程在淘宝商品数据抓取中的应用
开发语言·爬虫·python