剑指offer每日一题算法题(java解法)
方便日后复习,从今天开始。
算法之行始于足下
[编程题]斐波那契数列-- Java实现
------------------------------------------------------------------------------------------------------
题目描述
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。 n<=39
解题思路:
1.了解了斐波那契数列的规律,前两项相加,第一项为0,第1项为1;
拿到这题看了下,不是很难却首先选择用递归方法来写,不是很推荐,结尾会讲。
递归代码
public class Solution {
public int Fibonacci(int n) {
if(n>=0&&n<=1)
return n;
else{
n=Fibonacci(n-1)+Fibonacci(n-2);
}
return n;
}
}
个人推荐第二种解题,用循环解题
解题思路:
1.用2个值存住前两项的值,随着循环,再把前两个值变为最新的前面两个值
public class Solution {
public int Fibonacci(int n) {
int tmp1=0,tmp2=1,tmp3=0;
if(n>=0&&n<=1)
return n;
else{
for(int i=2;i<=n;i++){
tmp3=tmp1+tmp2;
tmp1=tmp2;
tmp2=tmp3;
}
}
return tmp3;
}
}
总结:
这里说明循环比递归好
- 递归用的内存比循环多
- 计算时间循环快,因为递归存值用到栈,需要花时间寻找出口.