剑指offer 面试题 (斐波那契)(3)
2016-05-09 14:07
197 查看
面试题: 求解斐波那契数列
/*题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。
斐波那契数列的定义如下:
0 n = 0;
f(n) = 1 n = 1;
f(n-1) + f(n-2) n > 1;
*/
题目分析:
/*
要做这道题首先得了解什么是斐波那契数列,例如:1 1 2 3 5 8. . . . . . 这样一个递增序列,且从第二个数起,每个数是前两个数的和。
很多同学立马就想到了递归,因为在讲递归的书中,把这个斐波那契数列可谓是百试不
爽! 那么递归到底是不是我们面试时应该答出的最佳答案呢?
*/
算法选择: 既然如此,我们就先以递归求解;
代码如下:
#include<stdio.h> #include<stdlib.h> long long Fibonacci(unsigned int n) { if(n<=0) return 0; if(n==1) return 1; return Fibonacci(n - 1) + Fibonacci(n - 2); } int main() { int n = 100; printf("%u\n",Fibonacci(n)); system("pause"); return 0; }
/*
递归的优点是会让代码看起来比较简洁,但同时也有显著的缺点。
递归调用由于是函数调用自身,二函数的调用是有时间和空间的消耗的;具有严重的效
率问题;当然,如果面试官没有特别的要求,应尽量采用递归;
就斐波那契数列而言,递归并不是最令面试官满意的答案!下面展示时间复杂度为
O(N)的常规算法!
*/
代码如下:
#include<stdio.h> #include<stdlib.h> long long Fibonacci(unsigned int n) { long long one = 1; long long two = 0; unsigned int i = 0; int tmp = 0; if(n <= 0) return 0; if(n==1) return 1; for(i = 2; i <= n; ++i) { tmp = one + two;//前两个数的和产生新的斐波那契数; two = one; //第n个数又变成第n-1个数; one =tmp; //新的斐波那契数又成为新的第n个数; } return tmp; } int main() { int n = 100; printf("%u\n",Fibonacci(n)); system("pause"); return 0; }
/*
扩展题目:一只青蛙一次可以跳上一级台阶,也可以跳上两级。求:
该青蛙跳上一个n级的台阶总共有多少种跳法?
*/
题目分析:
/*
可以把n级台阶时的跳法看成是n的函数,记为f(n);
当n>2时,第一次跳的时候就有两种不同的选择:
一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的跳法数目;
即为f(n-1);另一种选择是第一次跳2级,
此时跳法数目等于后面剩下n-2级台阶的跳法数目,即为f(n-2)。
因此,n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2)。分析到这里,
不难看出这实际上就是斐波那契数列了。
1 2 3 5 . ....
*/
算法选择: 递归实现;
代码如下:
#include<stdio.h> #include<stdlib.h> int Jump(int n) { if(n<=0) return 0; if(n==1) return 1; if(n==2) return 2; return (Jump(n-1)+Jump(n-2)); } int main() { int n = 4; printf("%d\n", Jump(n)); system("pause"); return 0; }
有兴趣的同学自己可以了解一下这个题的变种的数学归纳法!
over!
相关文章推荐
- php面试精华题-谢新阳
- iOS面试题(部分)
- 阿里前端笔试总结--H5面试题
- 一个面试大牛的经历
- 阿里、百度、搜狐等公司社招面试记录与总结
- 为什么你招聘不到程序员,以及软件如何定义现实世界
- 腾讯面试小经验(一)
- 程序员妻子自述:那些程序员教给我的
- 面试题1: 给定一个数组, 里面是一些数字, 请只用一个for循环, 找出其中第二大的数字.
- Java多线程面试问题
- Java 并发面试题
- 我敢保证,面试官想在简历里看到的其实是这些
- 一个女程序员想说的话
- 奋斗吧,程序员——第三十一章 寂寞空庭春欲晚,梨花满地不开门
- 程序员的求职与招聘
- 程序员的求职与招聘
- 为什么大神程序员都懂英文翻译,而你却不行?
- 删繁就简 - 云和恩墨的一道面试题解析
- 我们程序员眼中的母亲节
- 程序员、黑客与开发者之别