首页 > 解决方案 > 在 Python 中返回“无”的另一个递归(多个参数)

问题描述

我读了一些关于这个主题的文章,发现我必须返回函数而不是一个值......但在这种特定情况下我不能让它工作:

'''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.

编辑:(解决方案)

好的,所以我想通了。我通读了有关该主题的其他不同问题,并得出结论,我应该以相反的方式完成,即在不成功的情况下返回函数。

所以我不得不将返回值放在函数的末尾,以防万一递归调用函数:

'''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 

标签: pythonfunctionrecursion

解决方案


推荐阅读