当前位置: 首页 > 面试题库 >

递归功能无法正常工作

柳飞鸾
2023-03-14
问题内容

我很难弄清楚这里出了什么问题:

class iterate():
    def __init__(self):
        self.length=1
    def iterated(self, n):
        if n==1:
            return self.length
        elif n%2==0:
            self.length+=1
            self.iterated(n/2)
        elif n!=1:
            self.length+=1
            self.iterated(3*n+1)

例如,

x=iterate()
x.iterated(5)

输出None。它应该输出6,因为长度看起来像这样:5-> 16-> 8-> 4-> 2-> 1

进行一些调试后,我看到self.length正确返回了,但是递归中出了点问题。我不太确定 谢谢你的帮助。


问题答案:

在这两个elif块中,进行递归调用后不会返回任何值。您需要return在递归调用之前先输入,iterated例如return self.iterated(n/2)。如果您没有明确声明return,该函数将返回None

这样可以解决此问题,但是有一种方法可以使您的代码更简单:您实际上不需要member length。相反,您可以在递归调用的结果中加1:

def iterated(n):
    if n==1:
        return 1
    elif n%2==0:
        return 1 + iterated(n/2)
    else:
        return 1 + iterated(3*n+1)

print(iterated(5))

这不需要在类中,因为不需要任何成员。



 类似资料:
  • 问题内容: 我正在尝试使用Java中的 Split 函数拆分字符串 它给了我结果 但是当我尝试以下代码时 它给了我 为什么Java split函数无法拆分以“ |”分隔的字符串 问题答案: String#split()方法接受a 而不接受a 。 因为 是元字符,在正则表达式中有特殊含义。 当您逃脱它时,它会起作用。 更新: 在java:OFFICIAL DOCS中处理特殊字符 。 附带说明: 在J

  • 问题内容: 有谁知道为什么upload.onprogress在单独的功能上不能正常工作? 代码工作正常(进度条缓慢移动): 但是,如果我将其投入功能,它将无法正常工作: 在第二个代码上,进度条在文件上传完成后直接跳到100%,而不是在上传过程中很好地移到100% 因此,如果我将功能放进去,我已经尝试了提供的解决方案,它实际上可以工作。有没有办法把它放在函数之外? 问题答案: 通过调用函数本身,并将

  • 我对jQuery提交功能有一些疑问。 这里是工作环境 jQuery:1.7。2,铬(18.0.1025.168米)。 有两个问题。 第一: 我的密码是这样的 HTML jQuery 问题是它在firefox和opera中运行良好,但在chrome中运行良好。 2st: html:如上所述。 jQuery: 它在火狐、歌剧和铬合金中不起作用。它总是触发form.submit原因。 我很困惑。谁能弄清

  • 问题内容: 我已经尝试解决这一问题了一段时间,但是我无法使其正常工作。当用户单击链接时,系统会要求他确认他要执行此操作。然后进行ajax调用。调用的脚本可以正常工作,并返回重定向到的字符串。 我在这里看到了几个关于window.location问题的帖子,但是它们都无法解决我的问题。 我的代码: 如果不这样做,我可以看到传递了正确的数据。例如/ user / homepage。但是,重定向尚未发生

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请