伪代码,复杂性

时间:2015-11-20 02:39:21

标签: function

所以我需要为斐波那契函数写两个伪代码。我从一个递归定义开始,即

function VAL=fibonacci(N)  
    if N=1 then  
        VAL=1  
    else if N=2 then  
        VAL=1  
    else  
        VAL=fibonacci(N-1)+fibonacci(N-2)  
    end if  
    return VAL  
end function  

此外,我用以下方式编写了非递归版本:

function VAL=fibonacci(N)  
    f=1  
    VAL=1  
    for I=3 to N  
        f_new=VAL+f  
        f=VAL  
        VAL=f_new  
    end for  
    return VAL  
end function  

如果有人能够检查是否有任何意义,那将是非常有帮助的。所以现在的问题是:我们假设添加两个整数的额外成本是一个单位。用N来估计第一个递归函数和第二个非递归函数的总计算代价。

由于有些人试图向我解释没有成功,我会感激有人能给我解决方案,所以我可以尝试这样理解。

1 个答案:

答案 0 :(得分:0)

在第一个函数中,使用递归来计算Fibonacci的值,该值具有许多重复计算,例如:f(5)= f(4)+ f(3),f(4)= f(3 )+ f(2)。这里,f(3)被计算两次,浪费时间和存储空间,f(2)将被计算三次:f(5) - > f(4) - > f(3) - > f (2),f(5) - > f(4) - > f(2),f(5) - > f(3) - > f(2)。 assum输入参数N足够大, f(n)= f(n - 1)+ f(n - 2) ... 函数中有非常大的重复计算。从理论分析来看,时间复杂度为O(1.618 ^ n)

但是在第二个函数中,函数中的每个n只计算一次,因此时间复杂度为O(n)。