python - 如何减少递归函数定义中所需的参数(用于计算a*b)

标签 python recursion parameters arguments

我有一个计算 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)))。您有两个组件要实现:

  1. 一般(递归)情况 - 如何使用以前的结果按顺序计算下一个结果?
  2. 基本情况 - 您如何确定不需要任何额外的递归?在这种情况下,您只需返回一个值而无需再次调用该函数。

尝试实现递归阶乘函数。这可能是最容易编写的(求和除外)递归函数。

关于python - 如何减少递归函数定义中所需的参数(用于计算a*b),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45600661/

相关文章:

java - Sudoko Backtracker 中奇怪的堆栈溢出错误

c - 将参数传递给函数(int 到 size_t)

python - Django 评论

c++ - 指示方向的迷宫解算器

python - 使用用户定义的规则对项目进行排序

java - 递归函数获取列表动态数量的组合

parameters - 将变量传递给 flutter 中的void函数

mysql - mysql数据库中的字段作为函数的参数?

Python 两个列表之间的多重条件

python - Django CacheMachine 中的错误忽略了模型的保存?