首页 > 解决方案 > 递归函数能够打印,但不返回正确的值

问题描述

我正在尝试编写用于构建父节点和子节点以及搜索数据的代码。这些是规则:

  1. 用户必须有不同的数据。
  2. 像树结构一样,用户 1 成为父节点。
  3. 父节点可以从子节点中搜索数据。
  4. 子节点只能搜索自己的数据或更多下级节点的数据。

这是我的代码:

# row_data format : user id / parent id / number of data / data 1 ~ data n
row_data = ["1 0 3 1 2 3", "2 1 2 4 5", "3 1 2 6 7", "4 2 1 8", "5 0 2 9 10", "6 3 1 11", "7 6 1 12", "8 7 1 13",
        "9 8 2 14 15"]

# query "2 5": Does user 2 able to access Data 5? 
queries = ["2 5", "1 8"]
user_data = []


def search(uID, data):
    for dict in user_data:
        if data in dict["Data"]:
            if dict["USER_ID"] == uID:
                return True
            else:
                return parent_check(uID, dict["PARENT_ID"]) # [This is problem] Why isn't it return back?

def parent_check(uID, pID):
    for dict in user_data:
        if pID == dict["USER_ID"]:
            if uID == dict["USER_ID"]:
                return True # [This is problem] Why doesn't work "return"?

    return False

if __name__ == '__main__':
    for input in row_data:
        input = input.split()

        input_data = {"USER_ID": input[0], "PARENT_ID": input[1], "NUMBER_OF_DATA": input[2], "Data": input[3:]}
        user_data.append(input_data)

    for query in queries:
        uID, data = query.split()
        print(search(uID, data))

我尝试使用字典数据类型来解决这个问题。

我的代码没有显示错误,但也没有显示所需的结果。当我尝试print("search complete")return true区域中使用打印时parent_check(),它工作得很好。但是,递归调用的返回不起作用。返回显示为无。

当我运行我的代码时,输​​出应该是真/真,但我得到的是真/假。

标签: pythonpython-3.xalgorithm

解决方案


在递归函数中,所有代码路径都需要一个return语句。尝试这个:

def parent_check(uID, pID):
    for dict in user_data:
        if pID == dict["USER_ID"]:
            if uID == dict["USER_ID"]:
                return True 
            else:
                return parent_check(uID, dict["PARENT_ID"]) 
    return False

我添加的代码:

else:
    return parent_check(uID, dict["PARENT_ID"]) 

输出:

True
True

推荐阅读