递归错误。理解递归函数的逻辑有困难吗

2024-10-01 19:33:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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的连续数字。你知道吗


Tags: thefromimportcachereturnifisdef
2条回答

在这里,我会尽力为你澄清:)

编写一个列出从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

你的问题是,你必须很好地学习所有的递归故事,这需要时间。。。你必须把程序在每一步中执行的内容形象化。我的建议是在每次调用函数时首先绘制堆栈缓冲区


您的问题的解决方案是:

def recursiveFunc(x):
    if x == 1:
        return 1
    elif x > 1 :
        return 1 + recursiveFunc(x-1) #This is the part I've changed.

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

为什么你的手机坏了?因为当函数调用return时,return启动新函数recursiveFunc(x)。。。但和以前一样!所以有一个无限循环。 此外,如果你加上像recursiveFunc(x+1)和你传递的x是正的,你将永远不会进行比较x==0,因为x是不断增长的调用。你知道吗

相关问题 更多 >

    热门问题