我正在尝试编写一个递归函数,该函数将整数作为其参数,并返回整数之内的数字对的总数,这些数字对的总和为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找到了。有谁知道我该如何解决?
答案 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