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

相关推荐
Halo_tjn3 分钟前
Java 基于分支和循环结构的专项实验
java·开发语言·计算机
2302_815906676 分钟前
石头剪刀布小游戏开发
python
Kuo-Teng10 分钟前
LeetCode 141. Linked List Cycle
java·算法·leetcode·链表·职场和发展
逸风尊者11 分钟前
开发需掌握的知识:高精地图
人工智能·后端·算法
洛_尘15 分钟前
数据结构--9:反射、枚举以及lambda表达式(了解即可)
java·开发语言·数据结构
资深web全栈开发17 分钟前
力扣2536子矩阵元素加1-差分数组解法详解
算法·leetcode·矩阵·golang·差分数组
青衫码上行21 分钟前
【Java Web学习 | 第12篇】JavaScript(6)DOM
java·开发语言·前端·javascript·学习
杜子不疼.29 分钟前
【C++】 set/multiset底层原理与逻辑详解
java·开发语言·c++
Macbethad35 分钟前
如何用WPF做工控设置界面
java·开发语言·wpf
汗流浃背了吧,老弟!1 小时前
中文分词全切分算法
算法·中文分词·easyui