如何使用递归查找 python 中数字列表中的最大数字
How to use recursive to find the maximum number in a list of numbers in python
我是编程新手,正在学习 python。
作为练习,我正在尝试编写一个递归函数来获取数字列表中的最大数字。
这是我试过的方法,但不能正常工作。有人可以指导我我做错了什么吗?谢谢!
P.S。我知道这个算法可以通过获取列表元素的 [1:] 来编写,我已经在互联网上找到了。我想知道我这样做的方式有什么问题,以便我可以从中学习。谢谢!
def get_max_in_list(data):
if len(data) == 1:
return data[0]
number = data.pop()
return number if number > get_max_in_list(data) else get_max_in_list(data)
data = [2, 6, 8, 3]
print(get_max_in_list(data))
你的问题是 get_max_in_list
的每次调用都会通过弹出修改 data
,这意味着 return number if number > get_max_in_list(data) else get_max_in_list(data)
中的两个调用 get_max_in_list(data)
正在两个不同版本的 data
。您可以通过存储值来解决此问题,这样您只需调用一次,但更好的选择是不修改输入。
def get_max_in_list(data):
if len(data) == 1:
return data[0]
number = data.pop()
m = get_max_in_list(data)
return number if number > m else m
你真的不应该在寻找最大值时修改数组(尽管 list.pop 正在这样做。)。也许你的想法最适合
def get_max_in_list(data):
if len(data) == 1:
return data[0]
return data[-1] if data[-1] > get_max_in_list(data[:-1]) else get_max_in_list(data[:-1])
data = [2, 6, 8, 3]
print(get_max_in_list(data))
print(data)
因此,在访问列表时不要从列表中删除值,只需使用向后索引作为 [1, 2, 3][-1]
returns 3.
这是一个示例,说明如何使用起始索引(首次调用时默认为 0)更好地递归此列表,而无需修改列表或从中复制切片:
def get_max_in_list(data, start_index=0):
if start_index == len(data) - 1:
return data[start_index]
number = data[start_index]
result = get_max_in_list(data, start_index + 1)
return number if number > result else result
data = [2, 6, 8, 3]
print(get_max_in_list(data))
我是编程新手,正在学习 python。
作为练习,我正在尝试编写一个递归函数来获取数字列表中的最大数字。
这是我试过的方法,但不能正常工作。有人可以指导我我做错了什么吗?谢谢!
P.S。我知道这个算法可以通过获取列表元素的 [1:] 来编写,我已经在互联网上找到了。我想知道我这样做的方式有什么问题,以便我可以从中学习。谢谢!
def get_max_in_list(data):
if len(data) == 1:
return data[0]
number = data.pop()
return number if number > get_max_in_list(data) else get_max_in_list(data)
data = [2, 6, 8, 3]
print(get_max_in_list(data))
你的问题是 get_max_in_list
的每次调用都会通过弹出修改 data
,这意味着 return number if number > get_max_in_list(data) else get_max_in_list(data)
中的两个调用 get_max_in_list(data)
正在两个不同版本的 data
。您可以通过存储值来解决此问题,这样您只需调用一次,但更好的选择是不修改输入。
def get_max_in_list(data):
if len(data) == 1:
return data[0]
number = data.pop()
m = get_max_in_list(data)
return number if number > m else m
你真的不应该在寻找最大值时修改数组(尽管 list.pop 正在这样做。)。也许你的想法最适合
def get_max_in_list(data):
if len(data) == 1:
return data[0]
return data[-1] if data[-1] > get_max_in_list(data[:-1]) else get_max_in_list(data[:-1])
data = [2, 6, 8, 3]
print(get_max_in_list(data))
print(data)
因此,在访问列表时不要从列表中删除值,只需使用向后索引作为 [1, 2, 3][-1]
returns 3.
这是一个示例,说明如何使用起始索引(首次调用时默认为 0)更好地递归此列表,而无需修改列表或从中复制切片:
def get_max_in_list(data, start_index=0):
if start_index == len(data) - 1:
return data[start_index]
number = data[start_index]
result = get_max_in_list(data, start_index + 1)
return number if number > result else result
data = [2, 6, 8, 3]
print(get_max_in_list(data))