如何修复递归功能

时间:2019-08-10 21:29:05

标签: python recursion

我正在尝试编写一个递归函数,该函数将整数作为其参数,并返回整数之内的数字对的总数,这些数字对的总和为10。例如,因为2 + 8 = 10,findPairs(28164730)将返回3 ,6 + 4 = 10和7 + 3 = 10。
这是我的代码现在的样子:

def find(x):
    x = str(x)
    count = 0
    if str((10 - int(x[0]))) in x:
        count = count + 1
        x = x[1:]
        find(x)
    elif len(x) > 1:
        x = x[1:]
        find(x)
    return count

我遇到的问题是该函数将始终返回计数为1,因为我再次调用它进行递归,并且将计数重新设置为0,而不是每次对数加1找到了。有谁知道我该如何解决?

3 个答案:

答案 0 :(得分:2)

现在,您的代码未使用递归find调用的返回值;它只是在呼叫find(x)。这将解决您的问题:

def find(x):
    x = str(x)
    count = 0
    if str((10 - int(x[0]))) in x:
        # count = count + 1
        x = x[1:]
        count = 1 + find(x)
    elif len(x) > 1:
        x = x[1:]
        count = find(x)
    return count

答案 1 :(得分:1)

一种可能的解决方案是例如通过完全不使用递归。参见例如以下尝试:

def find(x):
    x = str(x)
    count = 0
    for i in range(len(x)-1):

        if str((10-int(x[i]))) in x[i+1:]:
            count += 1

    return count

答案 2 :(得分:-1)

要么具有声明count然后调用find()的单独函数,要么将count设置为全局变量。我认为第一种方法更可取。

def get_count(x):
  count = 0
  find(str(x))
  return count

或者类似的东西。另外,如果您使用该方法,请确保从原始count = 0函数中删除find