剑指offer题目7:斐波那契数列

题目描述

大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0)。
n<=39

解答思路

典型的坑你用递归去实现的题目,用递归很简单。

int Fibonacci(int n) {
	if(n == 0) {
		return 0;
	}
	if(n == 1) {
		return 1;
	}
	return Fibonacci(n-1) + Fibonacci(n-2); 
}

然后你就gg了,因为会爆栈。
注意到斐波那契数列是f(n) = f(n-1) + fn(n-2),因此每次迭代把上一次的f(n)变成f(n-1),同理f(n-1)即可。

实现代码

// 0, 1, 1, 2, 3  
class Solution {
public:
    int Fibonacci(int n) {
    	int i = 0;
    	int ret = 0;
    	int ret2 = 0;
    	int ret1 = 0;

    	if(n == 0 || n== 1) {
    		return n;
    	}

    	while(i <= n) {
    		if(i == 0) {
    			ret2 = 0;
    		} else if(i == 1) {
    			ret1 = 1;
    		} else {
    			ret = ret1 + ret2;
    			ret2 = ret1;
    			ret1 = ret;
    		}
    		++i;
    	}
    	return ret;
    }
};
posted @ 2019-03-27 10:33  {-)大傻逼  阅读(166)  评论(0)    收藏  举报
欢迎转载,转载请注明本文地址。