python算法学习笔记(1)

21年9月18日——算法学习笔记

时间复杂度:略

空间复杂度:是指用来评估算法占用内存空间大小的指标
比如算法使用了几个变量,那么空间复杂度是O(1);使用了长度为n的一维列表,O(n);使用了m行n列的二维列表,O(mn)。

递归:有两个特点,调用自身并且有结束条件。
递归的经典例子,汉诺塔。
在这里插入图片描述
假设n == 3,三个柱子a, b, c,大中小 三个方块,步骤就是:小块放在c,中块放在b,小块从c放在b,所以小和中都在b了(n-1个圆盘从a经过c移动到b),然后把大块放在c(把第n个从a移动到c),然后把中小块从b放到c(把n-1个小圆盘从b经过a移动到c)。
代码:

def hanoi(n, a, b, c):
  if n > 0:
    hanoi(n - 1, a, c, b)
    print('从%s移动到%s' %(a, c))
    hanoi(n - 1, b, a, c)

hanoi(2, 'A', 'B', 'C')

n表示圆盘数量,a,b,c表示从左到右三个柱子。递归必须要设定结束条件n>0,设定输入为n,那么第一条就要一直跳到n1的那一层,然后再print(a->b),这里要注意你调用的是 hanoi(n - 1, a, c, b),所以柱子的顺序变了。然后我们还是n1,打印后第一层结束,然后跳回到第二层,也就是n==2,这时候第一段语句hanoi(n - 1, a, c, b),已经过了,所以又打印,注意这个时候是跳回,所以执行的是hanoi(n, a, b, c):,所以是print(a->c),然后调用一次hanoi(1, b, a, c),所以print(b->c)。一次往后面推。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值