问题描述
是否可以简化以下功能函数getCoeffs(r)
?它给出了线性递归的系数(r + 1个数字的列表)。函数getSequence(r,upto)
给出具有此递归和初始项的序列(它们是2的r + 1幂)。可以为该序列导出一个通用公式吗?
def binomial(n,k):
p = 1
for i in range(1,min(k,n-k)+1):
p *= n
p //= i
n -= 1
return p
def getCoeffs(r):
fAbs = lambda j: binomial(int((r+1+j)/2),j) if j>0 else (0 if r%4 < 2 else 2)
fSign = lambda j: -1 if j==0 else (
(-1 if (r+j)%4 in [1,2] else 1) if r%2==0 else (-1 if (r+j+2)%4 in [1,2] else 1)
)
return [fSign(k) * fAbs(k) for k in range(r+1)]
def getSequence(r,upto):
recN = r+1
initVals = [2**k for k in range(recN)]
cs = getCoeffs(r)
ret = initVals[:]
for k in range(recN,upto):
ret.append(sum(cs[j]*ret[k-recN+j] for j in range(recN)))
return ret
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)