Python递归(河内塔)
我是python新手,遇到了一个很容易解决的问题Python递归(河内塔),python,recursion,Python,Recursion,我是python新手,遇到了一个很容易解决的问题 def请求步骤(磁盘数): #实现这个功能 如果num_disks==0: 返回1 返回2*req_步骤(num_磁盘-1) 打印(“对于移动{}个磁盘,需要{}个步骤。”.format(3,req_步骤(3))) 函数应该是(2^n)-1,我无法使-1工作。。。它必须是一个递归函数 提前谢谢 编辑: 最终公式是=(2^(磁盘的数量))-1 这意味着,num\u of_disks=3应给出7,即(2*2*2-1)移动。您可以给出最终答案f(n)
def请求步骤(磁盘数):
#实现这个功能
如果num_disks==0:
返回1
返回2*req_步骤(num_磁盘-1)
打印(“对于移动{}个磁盘,需要{}个步骤。”.format(3,req_步骤(3)))
函数应该是(2^n)-1,我无法使-1工作。。。它必须是一个递归函数
提前谢谢
编辑:
最终公式是=(2^(磁盘的数量))-1
这意味着,
num\u of_disks=3
应给出7
,即(2*2*2-1)
移动。您可以给出最终答案f(n)=2^n-1
,这是一个通用公式,而问题要求您在n>1时使用递推公式f(n)=f(n-1)+1+f(n-1)
def请求步骤(磁盘数):
如果num_disks==1:
返回1
其他:
返回1+2*请求步骤(磁盘数-1)
打印(“对于移动{}个磁盘,需要{}个步骤。”.format(3,req_步骤(3)))
哪些产出:
For moving 3 disks, 7 steps are required.
下面的重复公式表示,当您要将n个磁盘从A移动到C时(假设放置磁盘的3根杆命名为A、B和C),您可以:
将n-1个磁盘从A移动到B,这需要f(n-1)个步骤
将第n个磁盘从A移到C,这需要1步
将n-1个磁盘从B移动到C,这需要f(n-1)个步骤
结果表明,该计算是公式的倒装二进制表示
此代码:
def请求步骤(磁盘数):
如果是num_磁盘,为什么您认为您的程序不能工作?你应该用输入和输出的例子来更新你的问题来说明这一点。更新它,这是河内塔函数BTW,这不是问题所在。问题是公式中缺少a-1。它的“(2^(磁盘的数量))-1,这意味着对于3,它应该给出7(2*2*2-1)@Orsons谢谢提醒,我已经修改了答案。非常感谢!它工作得非常好,现在有意义了!
2 3
3 7
4 15
5 31
6 63