递归思路:
确定i=0和1时候的最大值,
从arr[i]=arr[-1]开始看,分两种情况:
选择arr[i]这个值:那么最好的结果为截至为前一个可以选择的数(即i-2)的最佳结果rec_opt(arr, i-2)加上arr[i]这个值
不选择arr[i]这个值:那么最好的结果为截至前一个数的最佳结果rec_opt(arr, i-1)
比较两种结果,选最大的值为最佳结果
*时间复杂度为O(2^n)
### recursion
arr = [1,2,4,1,7,8,3]
def rec_opt(arr, i):
if i == 0:
return arr[0]
elif i == 1:
return max(arr[0], arr[1])
else:
yes = rec_opt(arr, i-2) + arr[i]
no = rec_opt(arr, i-1)
return max(yes, no)
rec_opt(arr,len(arr)-1)
动态规