当前位置: 首页 > 知识库问答 >
问题:

函数没有返回正确的布尔值

楮景明
2023-03-14

意识到递归是我的弱点之一后,我找到了一个网站,迫使你递归地解决简单问题(https://codestepbystep.com/problem/view/cpp/recursion/digitsSorted?problemsetid=15)

我坚持的一个(digitalsSorted,数字5)如下:调用一个传递数字作为参数的函数。如果该数字中的数字按递增顺序排序,则函数返回True,否则返回False。允许重复数字。该函数还应能够处理负数。单个数字按定义排序。

所以 func(0)、func(112234) 或 func(-345669) 返回 True,但 func(4321) 返回 False,依此类推。

为了强制您使用递归,有一系列限制:没有循环、没有全局变量、没有日期结构,但变量数量随您需要,而且您也不能使用字符串来解决它。

我的代码是:

def digitsSorted(x):
    if x < 0:
        x = x * (-1)
        digitsSorted(x)
    elif (x/10) < 1:
        return True 
    else:
        remainder1 =  x % 10
        x = (x - remainder1) / 10
        remainder2 = x % 10
        if remainder1 >= remainder2:
            digitsSorted(x)
        else:
            return False

当我调用函数时,我只在参数为个位数时得到正确的答案,否则它返回 None。但是我认为代码是正确的,因为当我更改时:

return True

为:

print(True)
return 

与“返回False”行相同,代码正常工作。我只是不知道问题是什么。

提前感谢

共有1个答案

单于海荣
2023-03-14

在递归中,当你“重新调用”函数时,你必须将其结果返回给原始函数。

你的代码很好。它只需要一个小小的改变:

def digitsSorted(x):
    if x < 0:
        x = x * (-1)
        return digitsSorted(x)
    elif x < 10:
        return True
    else:
        remainder1 = x % 10
        x = int(x / 10)
        remainder2 = x % 10
        if remainder1 >= remainder2:
            return  digitsSorted(x)
        else:
            return False

您必须做的更改是当您递归调用该函数时:< code > return digits sorted(x)

当我编辑您的代码时,我还做了一些小的更改,您不需要使用这些代码来使您的程序工作。

 类似资料:
  • 问题内容: 我使用mysql 5.7 我想将联接表的结果串联到单列中。我使用包裹在函数中的函数。这是查询 列包含来自联接表的数据。数据已正确检索,但问题是列未转换为正确的JSON。 如您所见,最后有点“切”。 我也尝试过,但是现在它不能转换为正确的数组。它看起来像字符串太大,不适合列。有办法解决吗? 更新 问题必须出在不适合列的st大小中。我尝试从联接表中选择较少的列,并且它可以正常工作。也许有一

  • 我想写返回true的Python函数一个字符串s是回文,也就是等于它的反。例如,“赛车”和“abba”是回文。到目前为止,这是我不成功的尝试。 当我告诉我的函数返回相反的结果时,我没有问题,但是,我不知道应该如何进行比较才能返回一个布尔值。 使用上面的函数会产生以下错误 现在我完全理解为什么会产生上述错误。这是因为一些递归函数返回一个boool并尝试将其添加到字符串中;但是我做不到的是如何避免这个

  • 如您所见,它将参数和的和保存在变量中,然后将包含它们的和的eax寄存器保存在变量中,就像函数返回值一样。 这样做是因为函数是用返回值定义的吗?

  • 我们有一个关于MySQL中返回错误整数值的函数的问题。我们已经检查了“booked_passeters”是否包含正确的值0,并且当移除该变量时,它可以正常工作,也就是说只返回整数40。但是,当我们试图从它中减去“booked_passeters”(最终仍应返回40)时,它就不起作用了。 包括下面的代码。 提前道谢!:-)

  • 这是一个布尔方法,是我作业的一小部分。我想根据输入和记录之间是否匹配来返回true或false。我想我遇到了语法问题。 这是该方法的代码,但始终有红线指示我应该在代码中添加return,否则将该方法更改为void。但我已经在if语句中添加了return true。