您的位置:首页 > 职场人生

微软,Google面试题 (16) —— O(logn)求Fibonacci数列

2010-08-24 01:27 459 查看
题目:定义Fibonacci数列如下:
/ 0 n=0
f(n)= 1 n=1
/ f(n-1)+f(n-2) n=2

输入n,用最快的方法求该数列的第n项。
解法一:常规解法。用递归做。不采取任何优化。
int Fibonacci(int n)
{
if (n == 0 || n == 1)
{
return n;
}

return Fibonacci(n-1) + Fibonacci(n-2);
}
解法二:还是递归,采用记忆化搜索优化。空间复杂度为O(n),时间复杂度也为O(n)。
int fi[MAX] = {0};

int Fibonacci(int n)
{
if (n == 0 || n == 1)
{
return fi
= n;
}
else if (fi
!= 0)
{
return fi
;
}

return fi
= Fibonacci(n-1) + Fibonacci(n-2);
}

解法三:从下往上计算,从f(1)和f(0)推算出f(2),以此类推。
int Fibonacci(int n)
{
int a = 0, b = 1, i, ret;
for (i = 2; i <=n; i++)
{
ret = a + b;
a = b;
b = ret;
}
return ret;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐