Python实现斐波那契序列递归函数返回空结果问题求助
问题原因分析
- 递归调用未返回结果:你在函数内部执行
fibonacci(n-1, sequence, originalN)后没有将该调用的结果返回,仅最深层的递归分支产生了返回值,外层函数均无返回值,最终输出为None。 - 可变默认参数陷阱:Python的函数默认参数在函数定义阶段初始化,而非每次调用时重新生成。你将可变对象
[0,1]设为sequence的默认值,多次调用函数时会复用同一个列表,累积之前的调用结果,导致非预期输出。 - 计数与切片逻辑不匹配:当前终止条件为
n<=0时返回sequence[:-2],加上初始列表已经包含2个元素,递归计数规则和「返回前n个斐波那契数」的需求不匹配,即便解决返回值问题,得到的列表长度也不符合要求。
修正后的代码
def fibonacci(n, sequence=None): # 每次调用重新初始化序列,规避可变默认参数问题 if sequence is None: sequence = [0, 1] # 列表长度达到n时直接返回对应切片 if len(sequence) >= n: return sequence[:n] next_value = sequence[-1] + sequence[-2] sequence.append(next_value) # 返回递归调用结果 return fibonacci(n, sequence) print(fibonacci(10))
运行后输出前10项斐波那契序列:[0, 1, 1, 2, 3, 5, 8, 13, 21, 34],符合预期。
内容的提问来源于stack exchange,提问作者Ahmed Nishaal
相关产品推荐
相关产品推荐

