我正在try 使用递归来查找列表中最大的数字. 我编写了一个程序,可以正确地运行,没有任何错误,但我想知道是否有更好的方法来纠正我的程序,同时仍然使用递归.
这是我的程序:
deff = -1
num1 = 0
num2 = 0
def closest(List):
global deff, num1, num2
deff1 = -1
if deff == -1:
deff = max(List) - min(List)
deff1 = max(List) - min(List)
if len(List) == 1:
deff = -1
return [num1, num2]
if abs(List[0] - List[1]) <= deff:
deff = abs(List[0] - List[1])
num1 = List[0]
num2 = List[1]
return closest(List[1:])
这是我的Tester程序:
from recursion import *
allPassed = True
def closestMain():
global allPassed
testCases = [(1, [3, 7, 67, 68, 210, 215], [67, 68]),
(2, [3, 7, 67, 168, 210, 215], [3, 7]),
(3, [3, 47, 67, 168, 210, 215], [210, 215]),
(4, [3, 7], [3, 7]),
(5, [3, 3, 3, 3, 3, 3], [3, 3]),
(6, [1, 2, 3, 4, 5, 6], [5, 6]),
(7, [5, 10, 100, 105, 305, 310], [305, 310]),
(8, [5, 10, 15], [10, 15])]
for num, L, expected in testCases:
result = closest(L)
if result != expected:
print(f'Closest Test {num} Failed. Expected {expected} got {result}')
allPassed = False
def main():
closestMain()
if allPassed:
print('All tests passed')
main()
同样没有错误,程序运行得很好,只是试着看看是否有更好的方法使用递归来完成这项工作.
假设列表始终是排序的,并且长度始终大于或等于2