我读了一些关于这个主题的内容,发现我必须返回Function而不是一个值...但是我不想让它在这个特定情况下工作:
'''Recursive Solution'''
def find_even_index(arr, index=0):
#break condition if non found
if len(arr) == index:
return -1
#init sum vars
sum_up = 0
sum_down = 0
#calculate up
for x in range(0, index):
sum_up += arr[x]
print(sum_up)
#caculate down
for x in range(index + 1, len(arr)):
sum_down += arr[x]
print(sum_down)
#break condition if found
if sum_up == sum_down:
print('return: ', index)
return index
index = index + 1
find_even_index(arr, index)
以下是测试案例:
Test.assert_equals(find_even_index([1,2,3,4,3,2,1]),3)
Test.assert_equals(find_even_index([1,100,50,-51,1,1]),1,)
Test.assert_equals(find_even_index([1,2,3,4,5,6]),-1)
Test.assert_equals(find_even_index([20,10,30,10,10,15,35]),3)
Test.assert_equals(find_even_index([20,10,-80,10,10,15,35]),0)
Test.assert_equals(find_even_index([10,-80,10,10,15,35,20]),6)
Test.assert_equals(find_even_index(range(1,100)),-1)
Test.assert_equals(find_even_index([0,0,0,0,0]),0,"Should pick the first
index if more cases are valid")
Test.assert_equals(find_even_index([-1,-2,-3,-4,-3,-2,-1]),3)
Test.assert_equals(find_even_index(range(-100,-1))
这是最初的任务:
您将获得一个整数数组。你的工作就是拿走 那个数组并找到一个索引N,其中整数的总和为 N的左边等于N右边的整数之和。如果 没有索引可以实现这一点,返回-1。
编辑:(解决方案)
好的,所以我明白了。我阅读了关于这个主题的其他不同问题并得出结论,我应该以相反的方式完成它,即在不成功的情况下返回函数。
所以我必须将returnvalue放在函数的末尾,并且只是在不成功的情况下递归调用函数:
'''Recursive Solution'''
def find_even_index(arr, index=0):
#break condition if non found
if len(arr) == index:
return -1
#init sum vars
sum_up = 0
sum_down = 0
#calculate up
for x in range(0, index):
sum_up += arr[x]
#caculate down
for x in range(index + 1, len(arr)):
sum_down += arr[x]
#break condition if found
if sum_up != sum_down:
index = index + 1
return find_even_index(arr, index)
return index