微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Python的递归函数中为变量设置初始值?

如何解决如何在Python的递归函数中为变量设置初始值?

这是我一直遇到的一个普遍问题。我觉得最好通过一个例子来问这个问题,所以我组成了一个函数来说明我遇到的一般问题。

import pandas as pd
df = pd.DataFrame({'dict_col': [[{'score': 100,'bonus': 10},{'score': 60,'bonus': 0}],[{'score': 80,'bonus': 20},{'score': 90,'bonus': 30}]]})
df['Bonus'] = df['dict_col'].apply(lambda x: [d.get('bonus') for d in x][1] - [d.get('bonus') for d in x][0])
df['score'] = df['dict_col'].apply(lambda x: [d.get('score') for d in x][1] - [d.get('score') for d in x][0])
df
Out[1]: 
                                            dict_col  Bonus  score
0  [{'score': 100,'b...    -10    -40
1  [{'score': 80,'bo...     10     10

在这里,我正在尝试为def function(a): b=56 if a>0: b=b+2 a=a-1 return function(a) else: print(b) 设置一个初始值,该初始值将根据b而变化。例如,如果a,我希望函数返回a=1,但实际上它返回58。我了解到,无论何时函数循环返回,都会将56重置为b,因此无论56是什么,该函数将始终返回56。我想知道如何在不每次重置的情况下将初始值设置为a

我希望这有道理!感谢您的帮助!

解决方法

已编辑:根据您的用例,b是否也可以作为递归状态的参数。 由于b需要由a确定,因此我们可以在b时设置b is None的初始值

def func(a,b=None):
  if b is None:
    # b is not set,determine `b` now depending on `a`
    b = 56     # fill-in other cases here   
  if a > 0:
    b += 2
    a -= 1
    return func(a,b)
  else:
    return b

func(1)
,

执行此类操作的典型方法是让递归函数将“累加器”(此处为b)作为附加参数。然后,您的实际函数将使用所需的初始值(此处为56)进行调用。

以您的示例为例:

def recursive(a,b):
    if a>0:
        b=b+2
        a=a-1
        return recursive(a,b)
    else:
        print(b)

def function(a):
    return recursive(a,56)

请注意,您可以通过使用recursive语句if来简化return recursive(a - 1,b + 2)。而且您可能想return b,而不是简单地print

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。