如何编写递归数字猜测函数?

时间:2014-10-27 05:39:39

标签: python recursion

我正在尝试创建一个使用递归来猜测用户正在考虑的数字的程序。我有点难过。我遇到了第二个代码块def binarySearch(bottom,top)函数的问题。该程序应该从猜测50开​​始。如果“N”则它会询问是否更大或更低。如果G那么它应该问75.依此类推。我无法将值设置为不同的答案。另外,我应该怎么做才不会给我漂浮点?

def guess(x):
    response = input("Is the number " + str(x) + "? Enter Y/N:\n")
    if response == "Y":
        print("YAY!  I got it!")
        return response
    else:
        print("BOO. . . Ok, I'll keep trying.")
        response = input("Is the number greater than or less than " + str(x) + "?Enter        G/L:\n")
    while  response != "G" and reponse != "L":
        print("Sorry, that isn't a valid response/")
        response = input("Pleae try again. Enter G/L:\n")
    return response    

def binarySearch(bottom,top):
    if bottom == top: #base case
        return bottom

    elif guess(top+bottom/2) == "G":
        top = top + bottom 
        return binarySearch(middle,top)

    elif guess == "L":
        top = (top/2)
        return binarySearch(bottom,top)

    binarySearch(bottom,top)

1 个答案:

答案 0 :(得分:1)

要使用非浮点数,请使用int(#number)。这会将数字转换为整数。

接下来需要做的是设置所选数字的边界。硬编码或打开供用户决定。这将允许适当的二进制猜测。也就是说,二进制搜索通过获取已知的值和已知的最大值来进行工作。

如果猜测的数字更大,则返回的数字应为(int(guessed number + top boundary)/2)。它在你的代码方式中,首先发生了分裂。如果猜到的数字较少,那么我们选择int( (guessedNumber -minimal known boundary)/2 )。最后,如果数字匹配,我们就取得了成功。

因此,需要不断检查四个变量:猜测,上边界,下边界和实际数字。

关于递归,根据用户输入创建变量newGuess。 newGuess将是您代码中的中间概念,根据用户响应的结果,它应该是新的低或新高。