方法1(非递归)
def max_value1(S):
if len(S) == 0:
return
result = S[0]
for i in S:
if result < i:
result = i
return result
方法2
def max_value2(arr, max, low, high):
"""
使用递归求最大值
"""
if len(arr) == 0:
return
if low >= high:
return max
else:
if max < arr[low]:
max = arr[low]
low += 1
return max_value2(arr, max, low, high)
方法3
def max_value3(arr):
"""
使用递归求最大值
"""
def inner_max(arr, max, low, high):
if len(arr) == 0:
return
if low >= high:
return max
else:
if max < arr[low]:
max = arr[low]
low += 1
return inner_max(arr, max, low, high)
return inner_max(arr, arr[0], 0, len(arr))
方法4
def max_value4(arr):
"""
使用递归求最大值
"""
arr_length = len(arr)
if arr_length == 0:
return
if arr_length == 1:
return arr[0]
if arr_length == 2:
max = arr[0] if arr[0] > arr[1] else arr[1]
return max
def inner_max(arr, left_max, right_max, left_index, right_index, low, high):
if left_index == low and right_index == high:
max = left_max if left_max > right_max else right_max
return max
else:
left_max = left_max if left_max > arr[left_index] else arr[left_index]
left_index -= 1
right_max = right_max if right_max > arr[right_index] else arr[right_index]
right_index += 1
return inner_max(arr, left_max, right_max, left_index, right_index, low, high)
mid = None
mid_index = len(arr)//2
if len(arr) % 2 == 0:
mid1 = arr[mid_index]
mid2 = arr[mid_index-1]
mid = mid1 if mid1 > mid2 else mid2
else:
mid = arr[mid_index]
return inner_max(arr, mid, mid, mid_index-1, mid_index+1, 0, len(arr))
完整代码
def max_value1(S):
if len(S) == 0:
return
result = S[0]
for i in S:
if result < i:
result = i
return result
def max_value2(arr, max, low, high):
"""
使用递归求最大值
"""
if len(arr) == 0:
return
if low >= high:
return max
else:
if max < arr[low]:
max = arr[low]
low += 1
return max_value2(arr, max, low, high)
def max_value3(arr):
"""
使用递归求最大值
"""
def inner_max(arr, max, low, high):
if len(arr) == 0:
return
if low >= high:
return max
else:
if max < arr[low]:
max = arr[low]
low += 1
return inner_max(arr, max, low, high)
return inner_max(arr, arr[0], 0, len(arr))
def max_value4(arr):
"""
使用递归求最大值
"""
arr_length = len(arr)
if arr_length == 0:
return
if arr_length == 1:
return arr[0]
if arr_length == 2:
max = arr[0] if arr[0] > arr[1] else arr[1]
return max
def inner_max(arr, left_max, right_max, left_index, right_index, low, high):
if left_index == low and right_index == high:
max = left_max if left_max > right_max else right_max
return max
else:
left_max = left_max if left_max > arr[left_index] else arr[left_index]
left_index -= 1
right_max = right_max if right_max > arr[right_index] else arr[right_index]
right_index += 1
return inner_max(arr, left_max, right_max, left_index, right_index, low, high)
mid = None
mid_index = len(arr)//2
if len(arr) % 2 == 0:
mid1 = arr[mid_index]
mid2 = arr[mid_index-1]
mid = mid1 if mid1 > mid2 else mid2
else:
mid = arr[mid_index]
return inner_max(arr, mid, mid, mid_index-1, mid_index+1, 0, len(arr))
if __name__ == "__main__":
import time
import sys
sys.setrecursionlimit(10000)
arr = list(range(1000))
start_time = time.time()
print(max_value1(arr))
end_time = time.time()
print(end_time - start_time)
print("===================================")
start_time = time.time()
print(max_value3(arr))
end_time = time.time()
print(end_time - start_time)
print("===================================")
start_time = time.time()
print(max_value4(arr))
end_time = time.time()
print(end_time - start_time)
print("===================================")