def find_parent(self, id_): # 向上查找一级单位 param = { "model": "PerfCategory", "id_": id_ } result= CustomerUtil.call_open_api( name="hcm.model.get", param=param) parent_id=result.get("parent",{}).get("id") self.record(f"parent_id----{parent_id}------{id_}") if parent_id: self.find_parent(parent_id) return id_我这个递归写的有问题么
时间: 2024-02-18 20:01:03 浏览: 174
看起来你的递归函数有些问题。首先,函数调用了一次 `find_parent(parent_id)`,但没有对其返回的结果进行任何处理。因此当递归从下层单位返回时,函数会直接返回当前单位的 `id_`,而不会返回最高级的上级单位。
其次,在递归函数中,你使用了 `self.record` 方法记录了一些信息。这个方法可能会在递归过程中被多次调用,因此你需要确保记录的信息能够区分不同的递归层级,避免信息混淆或重复。
下面是一个改进版的递归函数,可以正确地查找上级单位并记录递归过程中的信息:
```
def find_parent(id_, records=None):
if records is None:
records = []
param = {
"model": "PerfCategory",
"id_": id_
}
result = CustomerUtil.call_open_api(
name="hcm.model.get",
param=param
)
parent_id = result.get("parent", {}).get("id")
records.append(f"parent_id----{parent_id}------{id_}")
if parent_id:
return find_parent(parent_id, records)
else:
return parent_id, records
```
这个函数接受两个参数:`id_` 表示当前单位的 ID,`records` 是一个列表,用于记录递归过程中的信息。如果 `records` 未提供,函数会创建一个新的空列表。
在函数内部,首先获取当前单位的上级单位 ID,然后记录递归信息到 `records` 列表中。如果当前单位有上级单位,函数会递归调用自身,并将 `records` 列表传递给下一级递归。如果当前单位没有上级单位,函数会返回当前单位的 ID 和 `records` 列表。
你可以像这样调用这个函数:
```
parent_id, records = find_parent('Software Engineer')
print(parent_id) # 输出该单位的最高级上级单位 ID 或 None
print(records) # 输出递归过程中记录的信息
```
希望这个改进版的函数能够帮到你,如有疑问请随时提出。
阅读全文