如何在递归中获取上一次迭代的数值?
问题分析与解决方案
你的代码核心问题是x_old的更新时机错误:你在递归调用完成后才给x_old赋值,这时候这个赋值根本无法传递到下一层递归——因为递归调用已经先执行了,下一层拿到的还是未更新的旧值。
正确实现思路
要记录上一次、当前、下一次迭代的数值,关键是在调用递归前,把当前的x值作为下一层的「上一次数值」(也就是x_old参数)传递进去,同时把计算后的新x作为下一层的「当前数值」。另外必须添加递归终止条件,否则会无限递归导致栈溢出。
修正后的代码示例
x = 1 # 初始old值可根据需求设置,比如第一次无历史值时设为None x_old = None def rec(current_x, old_x): # 打印上一次、当前迭代值 print('old: ', old_x) print('current: ', current_x) # 执行你的复杂函数计算新值(这里用示例函数代替) new_x = current_x ** 2 + current_x - 3 # 替换成你的实际复杂逻辑 # 打印下一次迭代的数值 print('new: ', new_x, '\n') # 递归终止条件(必须加!比如当新值超出某个范围时停止) if abs(new_x) > 1000: return # 递归调用:把新值作为下一层的current,当前值作为下一层的old rec(new_x, current_x) # 启动递归 rec(x, x_old)
关键说明
- 下一层递归的
old_x参数,直接传入当前层的current_x(也就是当前迭代的数值,即下一层的「上一次值」) - 下一层递归的
current_x参数,传入当前层计算出的new_x(即下一次迭代的当前值) - 终止条件必须根据你的实际需求设置,避免无限递归
内容的提问来源于stack exchange,提问作者GreatFilter
相关产品推荐
相关产品推荐

