我被要求创建一个动态编程算法,使用如下定义的四元数计算斐波那契数列的泛化:
t(0)=0,t(1)=1,t(2)=1,t(3)=2,递推关系t(n)=t(n-1)+t(n-2)+t(n-3)+t(n-4)
问题是,我不确定我的算法是否被视为“动态”算法,而仍然有(许多)输入值可以被多次计算以下是我所拥有的:

//n is the value being computed (Tn)
tetranacci(n)
    if n = 0 then
        return 0;
    else if n = 1 or n = 2 then
        return 1;
    else if n = 3 then
        return 2
    else
        return tetranacci(n - 1) + tetranacci(n - 2) + tetranacci(n - 3) + tetranacci(n - 4)

如果这是正确的,有人能为我澄清是什么使这个动态我在网上找不到严格的定义谢谢!

最佳答案

我想我已经搞清楚了。只需在计算值时使用数组存储值:

//n is the value being computed (Tn), A is an array containing already-computed values for n
tetranacci(n)
    if n = 0 then
        return 0;
    else if n = 1 or n = 2 then
        return 1;
    else if n = 3 then
        return 2
    else if A[n] != null
        return A[n]
    else
        A[n] = tetranacci(n - 1) + tetranacci(n - 2) + tetranacci(n - 3) + tetranacci(n - 4)
        return A[n]

10-06 16:08