鱼C论坛

 找回密码
 立即注册
查看: 4150|回复: 7

[已解决]怎么对汉诺塔问题的移动次数进行计数?

[复制链接]
发表于 2020-3-24 11:12:13 | 显示全部楼层    本楼为最佳答案   
  1. def hanoi(n,start,media,target):
  2.     time=0
  3.     if n == 1:
  4.         print(start,"--->",target)
  5.         time+=1
  6.     else:
  7.         time+=hanoi(n-1,start,target,media)
  8.         print(start,"--->",target)
  9.         time+=1
  10.         time+=hanoi(n-1,media,start,target)
  11.     return(time)
  12.    
  13. print(hanoi(3,'a','b','c'))
  14. print(hanoi(3,'a','b','c'))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-24 15:57:31 | 显示全部楼层
环境过程发明家 发表于 2020-3-24 15:49
time+=hanoi(n-1,start,target,media)
这句没看懂  能解释一下嘛 谢谢


time+=hanoi(n-1,start,target,media)
就是
time = time + hanoi(n-1,start,target,media)
函数的返回值是移动的次数,这句话就是把递归调用时所计数的次数返回来与本次调用的计数值相加。
也就是把多层递归中移动的次数相加。
不太理解的话,可以这样写,或许更好理解。
  1. def hanoi(n,start,media,target):
  2.     time=0
  3.     if n == 1:
  4.         print(start,"--->",target)
  5.         time+=1
  6.     else:
  7.         t1=hanoi(n-1,start,target,media)
  8.         time =time+t1
  9.         print(start,"--->",target)
  10.         time+=1
  11.         t2=hanoi(n-1,media,start,target)
  12.         time=time+t2
  13.     return(time)
  14.    
  15. print(hanoi(3,'a','b','c'))
  16. print(hanoi(3,'a','b','c'))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-10-14 05:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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