首页 > 解决方案 > 递归错误。难以理解递归函数的逻辑

问题描述

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 的连续数字。

标签: pythonfunctionrecursion

解决方案


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


您的问题的解决方案是:

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 它的调用一次又一次。


推荐阅读