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 的连续数字。
解决方案
您的问题是您必须很好地学习所有递归故事,这需要时间……您必须可视化程序在每一步中执行的内容。我的建议是在每次调用函数时第一次绘制堆栈缓冲区
您的问题的解决方案是:
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 它的调用一次又一次。
推荐阅读
- javascript - 使用 Ionic React 添加滚动按钮
- r - 使用 dnorm 创建循环并将结果添加到表中
- google-apps-script - 使用脚本将谷歌表中的文件重命名为上个月的名称
- python - Python解析二进制数据时嵌套循环的优化
- c# - 如何将文本设置为禁用的文本框?
- php - 如果查询在引号之间,如何从弹性搜索中获取精确的文本匹配
- javascript - 计算周末Js的函数中的december问题
- android - 从共享表启动应用程序时导航到特定片段
- sql - Oracle 中分隔符的类比是什么?
- django - django - 只有在提交表单后才能访问上传页面。直接输入上传url应该不行