Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用递归进行数字猜测_Python_Python 3.x_Recursion - Fatal编程技术网

Python 使用递归进行数字猜测

Python 使用递归进行数字猜测,python,python-3.x,recursion,Python,Python 3.x,Recursion,我有一些关于递归的作业,我真的被卡住了。任务是创建一个程序,我们在其中输入上下边界以及这些边界内的数字。程序应该计算这些边界的中间数目。如果中间数大于该数,则中间数成为下边界,如果较低,则为上边界。它一直这样做,直到它选择了正确的数字。当它相同时,程序停止并返回它 下面是我已经编写的代码,但它只有在第一次猜测正确时才起作用: def number_guess(number ,upper_boundary, lower_boundary): boundary_dif = upper_bou

我有一些关于递归的作业,我真的被卡住了。任务是创建一个程序,我们在其中输入上下边界以及这些边界内的数字。程序应该计算这些边界的中间数目。如果中间数大于该数,则中间数成为下边界,如果较低,则为上边界。它一直这样做,直到它选择了正确的数字。当它相同时,程序停止并返回它

下面是我已经编写的代码,但它只有在第一次猜测正确时才起作用:

def number_guess(number ,upper_boundary, lower_boundary):
    boundary_dif = upper_boundary - lower_boundary
    middle_number = boundary_dif/2 + lower_boundary
    if middle_number == number:
        return middle_number
    if middle_number > number:
        middle_number = lower_boundary
        number_guess(number, upper_boundary, lower_boundary)
    if middle_number < number:
        middle_number = upper_boundary
        number_guess(number, upper_boundary, lower_boundary)
def number\u guess(数字、上下边界):
边界_dif=上_边界-下_边界
中间数量=边界dif/2+下边界
如果中间编号==编号:
返回中间编号
如果中间编号>编号:
中间\u数=下\u边界
数字猜测(数字、上边界、下边界)
如果中间编号<编号:
中间数量=上边界
数字猜测(数字、上边界、下边界)

注意,只能使用递归来完成。递归可能需要一段时间才能掌握。我会深入调查,看看这是如何运作的:

def number_guess(number, lower, upper):
    middle = ((upper - lower) // 2) + lower
    if middle == number:
        return middle
    if number > middle:
        return number_guess(number, middle, upper)
    return number_guess(number, lower, middle)

print(number_guess(57, 0, 100))
boundary_dif = upper_boundary - lower_boundary
middle_number = boundary_dif // 2 + lower_boundary

递归可能需要一段时间才能掌握。我会深入调查,看看这是如何运作的:

def number_guess(number, lower, upper):
    middle = ((upper - lower) // 2) + lower
    if middle == number:
        return middle
    if number > middle:
        return number_guess(number, middle, upper)
    return number_guess(number, lower, middle)

print(number_guess(57, 0, 100))
boundary_dif = upper_boundary - lower_boundary
middle_number = boundary_dif // 2 + lower_boundary

这段代码有很多问题。第一个是常见的递归编程错误。递归函数返回一个值:

if middle_number == number:
    return middle_number
但当您递归调用它时,会忽略返回的值:

if middle_number > number:
    middle_number = lower_boundary
    number_guess(number, upper_boundary, lower_boundary)
如果你返回一个值,你必须处理它。在这种情况下,解决方案很简单,只需依次返回:

    return number_guess(number, upper_boundary, lower_boundary)
下一个问题是两个极限测试是反向的:

if middle_number > number:
    middle_number = lower_boundary
如果中间数大于该数,则它应该是新的上边界,而不是下边界。对于
上边界
测试,同上。下一步,此分配是向后的:

middle_number = lower_boundary
return number_guess(number, upper_boundary, lower_boundary)
我们不再使用
中间值
,在此之后,我们使用
下边界
递归,因此我们应该:

lower_boundary = middle_number
return number_guess(number, upper_boundary, lower_boundary)
或者,我们可以简单地做到:

return number_guess(number, upper_boundary, middle_number)
上边界同上
代码。接下来,您将其标记为Python 3,因此以下代码:

boundary_dif/2
将生成一个你不想要的浮点数!你需要:

boundary_dif // 2
最后,尽管这是可行的:

def number_guess(number, lower, upper):
    middle = ((upper - lower) // 2) + lower
    if middle == number:
        return middle
    if number > middle:
        return number_guess(number, middle, upper)
    return number_guess(number, lower, middle)

print(number_guess(57, 0, 100))
boundary_dif = upper_boundary - lower_boundary
middle_number = boundary_dif // 2 + lower_boundary
也可以简单地表示为:

middle_number = (upper_boundary + lower_boundary) // 2

这段代码有很多问题。第一个是常见的递归编程错误。递归函数返回一个值:

if middle_number == number:
    return middle_number
但当您递归调用它时,会忽略返回的值:

if middle_number > number:
    middle_number = lower_boundary
    number_guess(number, upper_boundary, lower_boundary)
如果你返回一个值,你必须处理它。在这种情况下,解决方案很简单,只需依次返回:

    return number_guess(number, upper_boundary, lower_boundary)
下一个问题是两个极限测试是反向的:

if middle_number > number:
    middle_number = lower_boundary
如果中间数大于该数,则它应该是新的上边界,而不是下边界。对于
上边界
测试,同上。下一步,此分配是向后的:

middle_number = lower_boundary
return number_guess(number, upper_boundary, lower_boundary)
我们不再使用
中间值
,在此之后,我们使用
下边界
递归,因此我们应该:

lower_boundary = middle_number
return number_guess(number, upper_boundary, lower_boundary)
或者,我们可以简单地做到:

return number_guess(number, upper_boundary, middle_number)
上边界同上
代码。接下来,您将其标记为Python 3,因此以下代码:

boundary_dif/2
将生成一个你不想要的浮点数!你需要:

boundary_dif // 2
最后,尽管这是可行的:

def number_guess(number, lower, upper):
    middle = ((upper - lower) // 2) + lower
    if middle == number:
        return middle
    if number > middle:
        return number_guess(number, middle, upper)
    return number_guess(number, lower, middle)

print(number_guess(57, 0, 100))
boundary_dif = upper_boundary - lower_boundary
middle_number = boundary_dif // 2 + lower_boundary
也可以简单地表示为:

middle_number = (upper_boundary + lower_boundary) // 2

这称为二进制搜索。如果你查找二进制搜索,你会发现很多例子。这叫做二进制搜索。如果你查阅二进制搜索,你会发现很多例子。非常感谢你的解释!刚刚进入递归的第一步,非常有帮助!非常感谢你的解释!刚刚进入递归的第一步,非常有帮助!