鱼C论坛

 找回密码
 立即注册
12
返回列表 发新帖
楼主: 天下有敌

Python汉诺塔程序怎么用迭代方式写出来?

[复制链接]
发表于 2020-6-18 15:19:57 From FishC Mobile | 显示全部楼层
100个最好用迭代,不要用递归,数字越大你电脑计算的时间也越长,递归和迭代的运行是有区别的
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 09:47:29 | 显示全部楼层
本帖最后由 majian890324 于 2020-7-5 09:52 编辑
天下有敌 发表于 2020-6-11 10:10
你这个算的步数都是错的


刚看到这个帖子,怎么可能错呢,初始化层数是必须>=3,
我试了一下你的那个公式和我这个得出的结果是一样的,
如果只想要最后的结果就把print(j)的缩进前移一下就是最终的结果.


  1. count = int(input("输入盘数,计算步数:"))
  2. print(2**int(count)-1) # 楼主的公式

  3. x = 3 # x是初始层数
  4. j = 7 # j 是初始步数

  5. while x < count :
  6.     x += 1
  7.     j = j*2 + 1
  8. print(j)  # 我的循环


  9. if (2**int(count)-1) == j:
  10.         print('两个结果是一样的:YES')

  11. else:
  12.         print('两个结果是不一样的:NO')
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 10:56:52 | 显示全部楼层
本帖最后由 青出于蓝 于 2020-7-5 11:17 编辑

[code]
count=0
def Hanoi(n,Start,Mid,Tar):
    global count
    if n==1:
        print("{}->{}".format(Start,Tar))#如果只有一个圆盘,可以直接放到目标柱
        count+=1
    else:
        Hanoi(n-1,Start,Tar,Mid)#如果不是只有一个圆盘,首先需要将n-1个圆盘放到辅助柱上
        count+=1
        print("{}->{}".format(Start,Mid))#将第n个圆盘放到目标柱子上
        Hanoi(n-1,Mid,Start,Tar)#然后将剩下的n-1个圆盘,从辅助柱子搬到目标柱子上
n=input("你希望的汉诺塔层数是:")
Hanoi(eval(n),"X","Y","Z")
print("一共搬运了:{}次。".format(count))
input()


        
[\code]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-5 11:58:24 | 显示全部楼层
majian890324 发表于 2020-6-11 09:41
这样算迭代吗?楼主只说要步数,没说要移动的方法,所以我这算不算投机取巧?

那我们两个都错了,小甲鱼和我们算的不一样
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-7-5 12:06:19 | 显示全部楼层
青出于蓝 发表于 2020-7-5 10:56
[code]
count=0
def Hanoi(n,Start,Mid,Tar):

你这是递归,算大数据很慢。我的意思是用迭代,算的快
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 14:30:32 | 显示全部楼层
本帖最后由 majian890324 于 2020-7-5 15:15 编辑
天下有敌 发表于 2020-7-5 11:58
那我们两个都错了,小甲鱼和我们算的不一样


那不能啊,我查了一下就是这样算呀?你把小甲鱼的代码贴上来看一下呗!

  1. count = int(input("输入盘数,计算步数:"))
  2. print(2**int(count)-1) # 楼主的公式

  3. x = 3 # x是初始层数
  4. j = 7 # j 是初始步数

  5. while x < count :
  6.     x += 1
  7.     j = j*2 + 1
  8. print(j)  # 我的循环


  9. if (2**int(count)-1) == j:
  10.         print('两个结果是一样的:YES')

  11. else:
  12.         print('两个结果是不一样的:NO')



  13. #递归汉诺塔,有一共走了多少步

  14. count1 = 0
  15. def move(n,a,b,c):
  16.     global count1
  17.     if n==1:
  18.         count1 += 1
  19.         print('move', a, '-->', c)
  20.     else:
  21.         move(n-1,a,c,b)
  22.         move(1,a,b,c)
  23.         move(n-1,b,a,c)
  24. move(count,'A','B','C')
  25. print(count1)
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 15:03:13 From FishC Mobile | 显示全部楼层
小甲鱼的铁粉 发表于 2020-6-11 08:55
这样是迭代吗

这是递归,不是迭代
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 15:37:10 From FishC Mobile | 显示全部楼层
[code]def han(n):
    if n==1:
        return 1
    else:
        temp=1   
        while n>1:
            n=n-1
            temp*=2   
        return temp+1

print(han(100))[\code]
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 15:37:43 From FishC Mobile | 显示全部楼层
  1. def han(n):
  2.     if n==1:
  3.         return 1
  4.     else:
  5.         temp=1   
  6.         while n>1:
  7.             n=n-1
  8.             temp*=2   
  9.         return temp+1

  10. print(han(100))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 15:39:41 From FishC Mobile | 显示全部楼层
天下有敌 发表于 2020-7-5 12:06
你这是递归,算大数据很慢。我的意思是用迭代,算的快

小甲鱼视频里好像也有用迭代写的代码吧
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-7-5 15:57:52 From FishC Mobile | 显示全部楼层
  1. def han(n):
  2.     if n==1:
  3.         return 1
  4.     else:
  5.         temp=1   
  6.         while n>1:
  7.             n=n-1
  8.             temp*=2
  9.             #迭代完成后temp的值为初始temp*2**(n-1)   
  10.         return temp+1
  11.         #return的结果就是2**(n-1)+1,换算一下就是2**n-1,刚好n=1时,公式也成立
  12.     #所以最终结果可以写成是2**n-1
  13.         
  14. print(han(100))
复制代码

这样说应该解释明白了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-23 01:39

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表