如何初始化存储全局变量的类以在递归调用中更新及返回结果?
问题1:如何初始化storage类的三个变量为0
你可以直接给类的构造方法设置默认参数,或者实例化的时候主动传入0值即可,参考修改后的类定义:
class Storage: # 按照Python命名规范,类名首字母大写 def __init__(self, largest_triple=None, max_perimeter=0, triple_count=0): self.largest_triple = largest_triple # 三元组初始可以设为空,后续匹配到合法值再更新 self.max_perimeter = max_perimeter self.triple_count = triple_count
实例化的时候直接调用storage = Storage()就会自动把数值类变量初始化为0,不用额外传参。
如果你不想修改类的原有定义,也可以在实例化的时候手动传0:
storage = Storage(largestTriple=[0,0,0], maxPerimeter=0, numberOfTriples=0)
问题2:递归过程用全局变量存中间值是否是通用合理方案
这种方案本身是可行的,尤其适合递归过程需要做累计计数、更新最值这类场景,比每次递归返回多个值再逐层合并的写法要简洁很多。
但不推荐用真正的全局变量,更推荐两种更安全的实现方式:
- 把存储中间值的实例作为参数传递给递归函数,作用域完全控制在调用链路内,不会出现多次调用函数导致的变量污染问题
- 把递归函数写成
find_max_triple的嵌套函数,直接修改外层函数定义的存储变量,逻辑更内聚
你现有代码里的checkPythag直接用self访问变量是无法生效的,需要把存储实例作为参数传入递归函数,同时要补充c >= c_max的终止条件避免无限递归。
内容的提问来源于stack exchange,提问作者Patrick_Chong
相关产品推荐
相关产品推荐

