我有一个计算 a*b
的递归函数,但是当我调用它时,我不想给它一个值:recursive_sum(5,5,0)
其中 0
是保存的总和。
def recursive_sum(a,b,saved):
if b == 1:
saved+=a
return saved
saved += a
b -= 1
b*recursive_sum(a,b,saved)
我明白这是一个非常简单的例子
当我添加 save=0
行时,我不必传递无意义的参数,显然,每次迭代都会将值重置为 0
。
我的问题:有没有一种方法可以实现我的函数来处理调用 recursive_sum(2,2)
而不必担心传递 0
到保存
?
最佳答案
整个方法只适用于整数,但这可能会让你直截了当:
def recursive_sum(a,b):
if b == 1:
return a
return a + recursive_sum(a, b-1)
这里的想法是,你的 return 语句需要调用函数调用的下一个迭代,然后使用它接收到的结果来计算它自己的返回值。编写递归函数时,实际上是在编写 f(f(...f(x)))。您有两个组件要实现:
- 一般(递归)情况 - 如何使用以前的结果按顺序计算下一个结果?
- 基本情况 - 您如何确定不需要任何额外的递归?在这种情况下,您只需返回一个值而无需再次调用该函数。
尝试实现递归阶乘函数。这可能是最容易编写的(求和除外)递归函数。
关于python - 如何减少递归函数定义中所需的参数(用于计算a*b),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600661/