for循环的递归不会返回任何内容

时间:2020-04-13 20:30:30

标签: python recursion

我有我编写的这个递归函数(简化了,虽然更长,但是想法保持不变)

def rec(point,length):
   if 1<length<=8:
        str_adj = '23456'
        for adj in str_adj:
            return rec(adj, length-1)
   elif length == 1:
       return 1
   else:
       return 0
rec('1',2)

[免责声明:我知道代码看起来很怪异,不需要某些部分,因为我简化了功能。 ]
现在,当我运行此代码时,我得到: 1 ,但是当我遍历字符串'23456'的每个字母(包含5个字母)时,输出需要为 5 ),对于每个字母,我用1的长度来称呼它(当我将其减小2-1 = 1时),每次我们得到length = 1时,我们都返回1,因此它应该返回5次。.
我坐下来调试并将代码分解为多个部分,并尝试了许多不同版本,例如在循环中删除“ return”,但是这样做时,输出为None ...
有人可以帮我发现错误吗?谢谢! 在python代码中,我尝试执行以下操作:

rec('2',1)+rec('3',1)+rec('4',1)+rec('5',1)+rec('6',1) = 1 + 1 + 1 + 1 +1 = 5

每次调用rec(?,1)= 1

比方说str_adj ='123456789'和length = 2 那么我想输出为: rec('1',1)+ rec('2',1)+等。直到+ rec('9',1)
每次我们调用rec(?,1)= 1时,它应该返回9

2 个答案:

答案 0 :(得分:1)

我不确定最终目标是什么,但是您的逻辑正在破坏代码。第一次调用rec时,它会输入第一个“ if”语句,然后从该位置调用

rec('2', 1)

此函数的调用输入“ elif”语句,返回1,然后结束。

如果您可以澄清要完成的任务,我可以尝试帮助解决此逻辑。

答案 1 :(得分:1)

您的预期行为与发生的情况不符。您无需修改​​str_adj并将每次设置str_adj等于23456。在您的for循环中,adj将始终为2,除非您对其进行更改。为此,它也不必是函数局部变量。

您还将需要一些东西来跟踪您的迭代。

像这样进行示例,将为您提供所需的结果。您可以做得更好,但是我会尽力更改它并匹配您的格式。

def rec(point,length, str_adj, iterations):
  print("rec(", point, ", ", length, ", ", str_adj, ", ", iterations, ")")
  if 1<length<=8:
      for adj in str_adj:
        str_adj = str_adj[1:]
        iterations = iterations + 1
        return rec(adj, length-1, str_adj, iterations)
  elif length == 1:
      return iterations
  else:
      return 0

iterations = 1;
str_adj = '23456'
print(rec('1',4, str_adj, iterations))
相关问题