递归错误。无法理解递归函数的逻辑

时间:2018-11-25 11:40:59

标签: python function recursion

from functools import lru_cache

@lru_cache(maxsize=1000)
def recursiveFunc(x):
    if x == 1:
        return 1
    elif x > 1 :
        return recursiveFunc(x) + recursiveFunc(x+1) #This is the part i'm having doubts about. 

for x in range(1, 101):
     print(x, ":", recursiveFunc(x))

该函数应该使用递归生成从1到100的连续数字。

2 个答案:

答案 0 :(得分:0)

您的问题是您必须很好地学习所有递归的故事,这需要时间...您必须可视化程序在每个步骤中执行的操作。我的建议是在每次调用该函数时都绘制堆栈缓冲区的第一时间


您的问题的解决方案是:

messageCoded = ""
for i in messageList:
    messageCoded += i

print(messageCoded)

为什么您不工作?原因是当函数调用return时,返回启动新函数recursiveFunc(x)...,但是和以前一样!因此存在无限循环。 此外,如果您添加类似recursiveFunc(x + 1)并传递x为正数,则您将永远无法进行比较x == 0,因为x越来越多地被调用。

答案 1 :(得分:0)

在这里,我将尽力为您解决问题:)

编写列出从1到n的数字的函数很简单。 如果我们尝试运行此功能

def recursiveFunc(i):
   print(i)
   recursiveFunc(i+1)

recursiveFunc(1)

它会先打印出1,然后再打印2、3...。但永远不会停止。

1
2
3
...

为解决此问题,我们添加了第二个参数

def recursiveFunc(i, n):
   if i > n:
      return

   print(i)
   recursiveFunc(i+1)

recursiveFunc(1, 100)

当它传递n时将转义该函数,在这种情况下为100

1
2
...
100

如果您想返回该系列而不是仅仅打印出来,则可以执行以下操作:

def recursiveFunc(i, n):
   if i >= n:
      return str(i)

   return str(i) + ", " + str(recursiveFunc(i + 1, n))

print(recursiveFunc(1, 100))

那么输出将是

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100