Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在递归的每个基本情况下添加数字?(Python3)?_Python_Python 3.x_Recursion - Fatal编程技术网

如何在递归的每个基本情况下添加数字?(Python3)?

如何在递归的每个基本情况下添加数字?(Python3)?,python,python-3.x,recursion,Python,Python 3.x,Recursion,我想在递归分支到达n==0的位置后,将1添加到ans,但它失败了 起初我尝试分配ans,并在其前面添加global,但它们不起作用 大家都知道我们可以在名单上做这件事。也就是说,基本情况可以为ans=[]处理ans.append(1)。我不知道我应该在这里做什么 #类型:int n def func(n) def爬升(n): 如果n==0: ans+=1 elif n

我想在递归分支到达
n==0的位置后,将1添加到
ans
,但它失败了

起初我尝试分配
ans
,并在其前面添加
global
,但它们不起作用

大家都知道我们可以在名单上做这件事。也就是说,基本情况可以为
ans=[]
处理
ans.append(1)
。我不知道我应该在这里做什么

#类型:int n
def func(n)
def爬升(n):
如果n==0:
ans+=1
elif n<0:
ans+=0
其他:
爬升(n-1)
爬升(n-2)
ans=0
爬升(n)
返回ans
编辑:以防你认为我是否错过了里面的
返回。不,我想复制的机制是这样的,它可以工作:

#类型:字符串数字
def func(数字)
dict={…}
def dfs(梳,i):
如果i==len(位数):
附加(梳)
其他:
对于dict[数字[i]]中的字母:
dfs(梳+字母,i+1)
ans=[]
如果是数字:
dfs(“,0)
返回ans

您的代码无法正确解析:

  • 在原始问题版本中,
    return
    出现在任何函数之外
  • ans
    未在
    gramb
    内部定义,并且在
    gramb
    外部修改变量时,必须使用
    非本地
    或类似声明
这不是问题,但是
ans+=0
是不可行的

下面是如何让代码解析和运行:

def func(n):
    def climb(n):
        nonlocal ans
        if n == 0:
            ans += 1
        elif n > 0:
            climb(n - 1)
            climb(n - 2)
    ans = 0  
    climb(n)
    return ans

print(func(5)) # 8
然而,这种工作方式使
爬升
成为一种具有副作用的功能,即它不是纯粹的。这不是最佳做法。通过返回必须添加的值,可以使
gramb
变得纯粹。这也使得无需将
爬升
包装到另一个功能中:

def climb(n):
    if n == 0:
        return 1
    if n < 0:
        return 0
    return climb(n - 1) + climb(n - 2)

print(climb(5)) # 8
def爬升(n):
如果n==0:
返回1
如果n<0:
返回0
返回爬升(n-1)+爬升(n-2)
打印(爬升(5))#8

请注意,两者都不是有效的解决方案。您可以通过使用备忘录进行改进。

最后三行不是您的功能的一部分。如果是这样,请提供最终
返回值所属的函数。@trincot它们不应包括在
爬升
函数中。这是leetcode#70爬楼梯解决方案的一部分。我想通过撤销递归函数来计算数字,然后返回最终答案。
return ans
在函数外部无效。函数中未定义和
ans
。这段代码不会解析。@trincot谢谢你的评论,我对我的答案做了一些修改,使它更清楚。谢谢,这就是我想问的。抱歉,我没有在原始帖子中输入
def func(n)
。我的错误是将
global ans=0
赋值给外部,但我应该在递归函数中键入
非局部ans
。因为当我为
ans=[]
使用
append
函数时(在我文章的第二个示例中显示),我不需要在内部分配
非本地的东西。我不明白为什么。当您使用
append
时,您不会为
ans
指定新值,而只是对其进行变异。这在没有
非本地
的情况下是允许的。但分配一个新值(使用
=
)则是另一回事。