滑稽蛋 发表于 2020-6-18 15:19:57

100个最好用迭代,不要用递归,数字越大你电脑计算的时间也越长,递归和迭代的运行是有区别的

majian890324 发表于 2020-7-5 09:47:29

本帖最后由 majian890324 于 2020-7-5 09:52 编辑

天下有敌 发表于 2020-6-11 10:10
你这个算的步数都是错的

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


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

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

while x < count :
    x += 1
    j = j*2 + 1
print(j)# 我的循环


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

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

青出于蓝 发表于 2020-7-5 10:56:52

本帖最后由 青出于蓝 于 2020-7-5 11:17 编辑


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]

天下有敌 发表于 2020-7-5 11:58:24

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

那我们两个都错了,小甲鱼和我们算的不一样

天下有敌 发表于 2020-7-5 12:06:19

青出于蓝 发表于 2020-7-5 10:56

count=0
def Hanoi(n,Start,Mid,Tar):


你这是递归,算大数据很慢。我的意思是用迭代,算的快

majian890324 发表于 2020-7-5 14:30:32

本帖最后由 majian890324 于 2020-7-5 15:15 编辑

天下有敌 发表于 2020-7-5 11:58
那我们两个都错了,小甲鱼和我们算的不一样

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

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

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

while x < count :
    x += 1
    j = j*2 + 1
print(j)# 我的循环


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

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



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

count1 = 0
def move(n,a,b,c):
    global count1
    if n==1:
      count1 += 1
      print('move', a, '-->', c)
    else:
      move(n-1,a,c,b)
      move(1,a,b,c)
      move(n-1,b,a,c)
move(count,'A','B','C')
print(count1)

tiger吴 发表于 2020-7-5 15:03:13

小甲鱼的铁粉 发表于 2020-6-11 08:55
这样是迭代吗

这是递归,不是迭代

tiger吴 发表于 2020-7-5 15:37:10

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]

tiger吴 发表于 2020-7-5 15:37:43

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))

tiger吴 发表于 2020-7-5 15:39:41

天下有敌 发表于 2020-7-5 12:06
你这是递归,算大数据很慢。我的意思是用迭代,算的快

小甲鱼视频里好像也有用迭代写的代码吧

tiger吴 发表于 2020-7-5 15:57:52

def han(n):
    if n==1:
      return 1
    else:
      temp=1   
      while n>1:
            n=n-1
            temp*=2
            #迭代完成后temp的值为初始temp*2**(n-1)   
      return temp+1
      #return的结果就是2**(n-1)+1,换算一下就是2**n-1,刚好n=1时,公式也成立
    #所以最终结果可以写成是2**n-1
      
print(han(100))
这样说应该解释明白了
页: 1 [2]
查看完整版本: Python汉诺塔程序怎么用迭代方式写出来?