如何解决如何在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 举报,一经查实,本站将立刻删除。