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

相关推荐
程序猿_极客1 分钟前
【2025 最新】 Python 安装教程 以及 Pycharm 安装教程(超详细图文指南,附常见问题解决)
开发语言·python·pycharm·python安装以及配置
2501_941235733 分钟前
C++中的装饰器模式变体
开发语言·c++·算法
2501_941111253 分钟前
基于C++的爬虫框架
开发语言·c++·算法
小欣加油4 分钟前
leetcode 429 N叉树的层序遍历
数据结构·c++·算法·leetcode·职场和发展
b***66614 分钟前
Python 爬虫实战案例 - 获取社交平台事件热度并进行影响分析
开发语言·爬虫·python
民乐团扒谱机5 分钟前
【元启发算法】SMA黏菌算法:当自然智慧走进代码世界
算法
ModestCoder_11 分钟前
Tokenization的演进:从NLP基石到多模态AI的“通用翻译器”
开发语言·人工智能·自然语言处理·机器人·具身智能
chushiyunen14 分钟前
django使用笔记
笔记·python·django
Kuo-Teng24 分钟前
LeetCode 142: Linked List Cycle II
java·算法·leetcode·链表·职场和发展
hweiyu0031 分钟前
GO的优缺点
开发语言·后端·golang