【问题标题】:Function doesn't return the right Boolean value函数没有返回正确的布尔值
【发布时间】:2018-08-11 00:42:37
【问题描述】:

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

我坚持使用 (digitsSorted, number 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 

与“return False”行相同,代码可以正常工作。我只是无法弄清楚问题所在。

提前致谢

【问题讨论】:

  • 单步调试时调试器会说什么?
  • 你好。我才写了几个星期的代码,所以恐怕我真的不知道如何使用调试器
  • 弄清楚如何使用调试器对于复杂代码和了解某些事情发生的原因(例如跟踪和解决错误)非常宝贵
  • 感谢您的建议。我刚刚检查了官方文档上的“The Python Debugger”,看起来很吓人!

标签: python-3.x recursion boolean


【解决方案1】:

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

您的代码很好。它只需要一个小改动:

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

你要做的改变是当你递归调用函数时:return digitsSorted(x)

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

【讨论】:

  • 这适用于任何函数,无论是否递归。
  • 很高兴我能帮上忙。如果我的回答对你有用,你可能想给我打勾。
  • 您声称知道这一点,但特意将其与答案中的递归联系起来。
  • @ScottHunter 公平地说,如果被调用的函数不打算产生返回值,returning 它是不正确的。
  • 你仍然需要返回 something;同样,与递归无关。
猜你喜欢
  • 2013-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-07-09
  • 1970-01-01
  • 1970-01-01
  • 2020-07-25
  • 2013-09-11
  • 2023-03-05
相关资源
最近更新 更多