对于递归来说,你要是非要展开思考的它的中间过程,那么就是自讨苦吃,这也违背了递归的初心。
按照递归的思路,我们只需要考虑n和n-1的关系就好了,至于n-2,n-3...完全没必要考虑。
就像外包一样,甲方分一部分给外包,外包再分一部分给小型创业外包公司一个道理。根本不需要知道小外包怎么实现的,只要它干完就相当于这个模块完成了。
回到正题:
一层,逻辑肯定是 A->C,
那么二层是什么?答案是:在一层的基础上,将第一层全部移到B上,这个时候A只剩一块了,那么将A->C,然后再将所有的B->C。结束
那么三层是什么?在二层的基础上重复上述逻辑。
def hanoi(n, a, b, c): if n == 1: print(f'将 {a} 移动到 {c}') else: #将上一层的所有从a->b hanoi(n - 1, a, c, b) # 那么a上就只有最底下的一块了,将这个最大的块移动到c上 hanoi(1, a, b, c) # 再将之前的n-1块移到c上。 hanoi(n - 1, b, a, c)
递归不要考虑复杂了,本身就是一个很简单的东西,我愿意称最简单的算法,没有之一,全天下所有的递归都是一个算法,只用找到n是n-1通过什么逻辑到达的即可。这个逻辑就是递归的逻辑。
2就是1+1得到的 3就是2+1得到的
f(n)就是f(n-1)+逻辑得到的,仅此而已。
不得不说,看了你的回答让我重新认识了递归
赞
所以,其实尾递归不会导致栈溢出是吗?
秀
妙哇
Sign in to make a reply
十三
对于递归来说,你要是非要展开思考的它的中间过程,那么就是自讨苦吃,这也违背了递归的初心。
按照递归的思路,我们只需要考虑n和n-1的关系就好了,至于n-2,n-3...完全没必要考虑。
就像外包一样,甲方分一部分给外包,外包再分一部分给小型创业外包公司一个道理。根本不需要知道小外包怎么实现的,只要它干完就相当于这个模块完成了。
回到正题:
一层,逻辑肯定是 A->C,
那么二层是什么?答案是:在一层的基础上,将第一层全部移到B上,这个时候A只剩一块了,那么将A->C,然后再将所有的B->C。结束
那么三层是什么?在二层的基础上重复上述逻辑。