Discuss / Python / 你们在讨论什么玩意

你们在讨论什么玩意

Topic source

十三

#1 Created at ... [Delete] [Delete and Lock User]

对于递归来说,你要是非要展开思考的它的中间过程,那么就是自讨苦吃,这也违背了递归的初心。

按照递归的思路,我们只需要考虑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)

十三

#2 Created at ... [Delete] [Delete and Lock User]

递归不要考虑复杂了,本身就是一个很简单的东西,我愿意称最简单的算法,没有之一,全天下所有的递归都是一个算法,只用找到n是n-1通过什么逻辑到达的即可。这个逻辑就是递归的逻辑。

2就是1+1得到的 3就是2+1得到的

f(n)就是f(n-1)+逻辑得到的,仅此而已。

Cracker

#3 Created at ... [Delete] [Delete and Lock User]

不得不说,看了你的回答让我重新认识了递归

雅,立春

#5 Created at ... [Delete] [Delete and Lock User]

所以,其实尾递归不会导致栈溢出是吗?

微雨

#6 Created at ... [Delete] [Delete and Lock User]

regnaro

#7 Created at ... [Delete] [Delete and Lock User]

妙哇


  • 1

Reply