所以我需要为斐波那契函数写两个伪代码。我从一个递归定义开始,即
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来估计第一个递归函数和第二个非递归函数的总计算代价。
由于有些人试图向我解释没有成功,我会感激有人能给我解决方案,所以我可以尝试这样理解。
答案 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)。