天下有敌 发表于 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 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] majian890324 发表于 2020-6-11 09:41
这样算迭代吗?楼主只说要步数,没说要移动的方法,所以我这算不算投机取巧?
那我们两个都错了,小甲鱼和我们算的不一样 青出于蓝 发表于 2020-7-5 10:56
count=0
def Hanoi(n,Start,Mid,Tar):
你这是递归,算大数据很慢。我的意思是用迭代,算的快 本帖最后由 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)
小甲鱼的铁粉 发表于 2020-6-11 08:55
这样是迭代吗
这是递归,不是迭代 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] 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)) 天下有敌 发表于 2020-7-5 12:06
你这是递归,算大数据很慢。我的意思是用迭代,算的快
小甲鱼视频里好像也有用迭代写的代码吧 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]