如何在递归函数中设置以初始传入可变参数为基准的固定常量
递归函数内固定初始参数为常量的实现方案
你说的需求完全可以实现,核心逻辑是仅在第一次调用时基于传入的初始参数生成常量,后续递归调用全程复用该值不做修改,常用实现方式有两种:
方式1:可选参数实现(最简单)
给函数新增一个默认值为None的常量参数,仅第一次调用时会把初始参数赋值给该常量,后续递归调用直接传递固定的常量值即可:
def func(n, constant=None): # 仅首次调用初始化常量 if constant is None: constant = n if n > 10: return print(n + constant) # 递归时原样传递常量,不修改 func(n + 1, constant)
测试效果和你给出的示例完全一致:
- 调用
func(1)时常量固定为1,输出2、3……11 - 调用
func(7)时常量固定为7,输出14、15……17
方式2:闭包实现(不暴露额外参数)
如果不希望调用方感知到额外的常量参数,可以用闭包把常量封装在外层函数作用域,内部递归函数直接读取该常量即可:
def func(n): # 外层函数仅执行一次,常量固定不会再修改 constant = n def inner(cur): if cur > 10: return print(cur + constant) inner(cur + 1) # 启动内部递归 inner(n)
这种方式调用时仅需要传入一个参数,对使用者更友好,常量完全是函数内部私有值,不会被外部或递归逻辑意外修改。
内容的提问来源于stack exchange,提问作者Mirkó Verő
相关产品推荐
相关产品推荐

