Python实现两个关联递推序列的求解技术问询
修正后的关联序列Python实现
原代码的问题
a函数无需将b作为参数传入,直接调用全局定义的b函数即可- 递归调用
a(n-1)时未传参,会引发参数缺失错误 - 调用
a(2,b)的方式错误,不需要传递b函数对象
正确的递归实现代码
from math import sqrt, pi def a(n): if n == 1: return 30 else: return a(n-1) * 1.1 + (sqrt(2)/(1+pi)) * b(n-1) def b(n): if n == 1: return 10 else: return b(n-1) * 1.1 - (sqrt(2)/(1+pi)) * a(n-1) # 调用示例:计算n=2时的两个序列值 print("a(2) =", a(2)) print("b(2) =", b(2))
优化:迭代实现(避免递归栈溢出)
如果需要计算较大的n值,递归可能会导致栈溢出,推荐用迭代方式实现:
from math import sqrt, pi def calculate_sequences(n): if n == 1: return 30, 10 a_prev, b_prev = 30, 10 coeff = sqrt(2)/(1+pi) for _ in range(2, n+1): a_current = a_prev * 1.1 + coeff * b_prev b_current = b_prev * 1.1 - coeff * a_prev a_prev, b_prev = a_current, b_current return a_prev, b_prev # 计算n=5时的值 a_5, b_5 = calculate_sequences(5) print("a(5) =", a_5) print("b(5) =", b_5)
内容的提问来源于stack exchange,提问作者Hassan Bouamoud
相关产品推荐
相关产品推荐

