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)

我是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)=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