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