剑指offer——面试题10:斐波那契数列
个人答案:
1 #include"iostream" 2 #include"stdio.h" 3 #include"string.h" 4 using namespace std; 5 typedef long long ll; 6 const int MAXN=10000; 7 8 ll fib[MAXN]; 9 ll Fibonacci(int n) 10 { 11 if(fib[n]!=-1) 12 return fib[n]; 13 return fib[n]=Fibonacci(n-1)+Fibonacci(n-2); 14 } 15 16 int main() 17 { 18 int n; 19 memset(fib,-1,sizeof(fib)); 20 fib[0]=0; 21 fib[1]=1; 22 while(cin>>n) 23 { 24 cout<<Fibonacci(n)<<endl; 25 } 26 return 0; 27 }
View Code
官方答案:
1 // 面试题10:斐波那契数列 2 // 题目:写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。 3 4 #include <cstdio> 5 6 // ====================方法1:递归==================== 7 long long Fibonacci_Solution1(unsigned int n) 8 { 9 if(n <= 0) 10 return 0; 11 12 if(n == 1) 13 return 1; 14 15 return Fibonacci_Solution1(n - 1) + Fibonacci_Solution1(n - 2); 16 } 17 18 // ====================方法2:循环==================== 19 long long Fibonacci_Solution2(unsigned n) 20 { 21 int result[2] = {0, 1}; 22 if(n < 2) 23 return result[n]; 24 25 long long fibNMinusOne = 1; 26 long long fibNMinusTwo = 0; 27 long long fibN = 0; 28 for(unsigned int i = 2; i <= n; ++ i) 29 { 30 fibN = fibNMinusOne + fibNMinusTwo; 31 32 fibNMinusTwo = fibNMinusOne; 33 fibNMinusOne = fibN; 34 } 35 36 return fibN; 37 } 38 39 // ====================方法3:基于矩阵乘法==================== 40 #include <cassert> 41 42 struct Matrix2By2 43 { 44 Matrix2By2 45 ( 46 long long m00 = 0, 47 long long m01 = 0, 48 long long m10 = 0, 49 long long m11 = 0 50 ) 51 :m_00(m00), m_01(m01), m_10(m10), m_11(m11) 52 { 53 } 54 55 long long m_00; 56 long long m_01; 57 long long m_10; 58 long long m_11; 59 }; 60 61 Matrix2By2 MatrixMultiply 62 ( 63 const Matrix2By2& matrix1, 64 const Matrix2By2& matrix2 65 ) 66 { 67 return Matrix2By2( 68 matrix1.m_00 * matrix2.m_00 + matrix1.m_01 * matrix2.m_10, 69 matrix1.m_00 * matrix2.m_01 + matrix1.m_01 * matrix2.m_11, 70 matrix1.m_10 * matrix2.m_00 + matrix1.m_11 * matrix2.m_10, 71 matrix1.m_10 * matrix2.m_01 + matrix1.m_11 * matrix2.m_11); 72 } 73 74 Matrix2By2 MatrixPower(unsigned int n) 75 { 76 assert(n > 0); 77 78 Matrix2By2 matrix; 79 if(n == 1) 80 { 81 matrix = Matrix2By2(1, 1, 1, 0); 82 } 83 else if(n % 2 == 0) 84 { 85 matrix = MatrixPower(n / 2); 86 matrix = MatrixMultiply(matrix, matrix); 87 } 88 else if(n % 2 == 1) 89 { 90 matrix = MatrixPower((n - 1) / 2); 91 matrix = MatrixMultiply(matrix, matrix); 92 matrix = MatrixMultiply(matrix, Matrix2By2(1, 1, 1, 0)); 93 } 94 95 return matrix; 96 } 97 98 long long Fibonacci_Solution3(unsigned int n) 99 { 100 int result[2] = {0, 1}; 101 if(n < 2) 102 return result[n]; 103 104 Matrix2By2 PowerNMinus2 = MatrixPower(n - 1); 105 return PowerNMinus2.m_00; 106 } 107 108 // ====================测试代码==================== 109 void Test(int n, int expected) 110 { 111 if(Fibonacci_Solution1(n) == expected) 112 printf("Test for %d in solution1 passed.\n", n); 113 else 114 printf("Test for %d in solution1 failed.\n", n); 115 116 if(Fibonacci_Solution2(n) == expected) 117 printf("Test for %d in solution2 passed.\n", n); 118 else 119 printf("Test for %d in solution2 failed.\n", n); 120 121 if(Fibonacci_Solution3(n) == expected) 122 printf("Test for %d in solution3 passed.\n", n); 123 else 124 printf("Test for %d in solution3 failed.\n", n); 125 } 126 127 int main(int argc, char* argv[]) 128 { 129 Test(0, 0); 130 Test(1, 1); 131 Test(2, 1); 132 Test(3, 2); 133 Test(4, 3); 134 Test(5, 5); 135 Test(6, 8); 136 Test(7, 13); 137 Test(8, 21); 138 Test(9, 34); 139 Test(10, 55); 140 141 Test(40, 102334155); 142 143 return 0; 144 }
View Code
转载于:https://www.cnblogs.com/acm-jing/p/10389502.html
剑指offer——面试题10:斐波那契数列相关推荐
- 剑指Offer - 面试题10- I. 斐波那契数列
文章目录 1. 题目 2. DP解题 3. 面试题 08.01. 三步问题 4. LeetCode 509. 斐波那契数 1. 题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 ...
- python剑指offer面试题_剑指offer面试题Q10 斐波那契数列 python解法
Q10.斐波那契数列 题目描述 写一个函数,输入n,求斐波那契数列的第n项. 解题思路 思路一 递归 递归很简单但是并不能AC python实现代码 class Solution: def Fibon ...
- 剑指offer面试题10- I. 斐波那契数列
题目描述 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项.斐波那契数列的定义如下: 思路 详见链接 代码 class Solution:def fib(self,n:int) ...
- 剑指offer面试题[9]-裴波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 分析: 虽然在学递归函数时,会用斐波那契数列作为例子,但这并不能说明递归的解法最合适这个题目 ...
- 剑指offer(7)斐波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 题目分析 我们都知道斐波那契可以用递归,但是递归重复计算的部分太多了(虽然可以通过),但是这 ...
- 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列
契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...
- 【剑指offer-Java版】09斐波那契数列
斐波那契数:比较简单,但是重点是讲效率的求解出来 简单的使用两个临时变量大大减少了重复计算 对于非常大的数如果使用long 来表示,那么 第100项左右就会发生溢出 换了BigInteger,理论上是 ...
- 循环斐波那契数列_剑指offer #10 斐波那契数列
(递归和循环)#10 斐波那契数列 一.斐波那契数列 定义: n = 0 , f(n) = 0 n = 1 , f(n) = 1 n > 1 , f(n) = f(n-1) + f(n-2) 思 ...
- 剑指offer——面试题10:二进制中1的个数
剑指offer--面试题10:二进制中1的个数 关于负数的自己没想出来,这是书中的两种算法,关于位运算的知识还是得要学习一个啊... Solution1: class Solution {public ...
- 剑指offer | 面试题10:斐波那切数列
转载本文章请标明作者和出处 本文出自<Darwin的程序空间> 本文题目和部分解题思路来源自<剑指offer>第二版 开始行动,你已经成功一半了,献给正在奋斗的我们 题目 求斐 ...
最新文章
- oracle数据库无监听程序
- 全球富豪大洗牌!马斯克登顶世界首富,黄铮国内第三超马云
- python没有错误但是不显示结果_为什么我在Python3中加载模块时遇到问题但在Python2中没有加载?...
- hibernate学习内容
- 三维旋转四元数系列(2.三维旋转之轴角与罗德里格斯公式推导)
- NHibernate使用--环境搭建
- mysql中创建表并添加约束_创建表并添加约束
- 西雅图华盛顿大学计算机专业录取,华盛顿大学西雅图分校录取
- UG二次开发GRIP成品工具
- MySQL学习笔记(2)
- 测判三极管的口诀 (挑战者)
- 主板上集成显卡的计算机在进行显示工作,电脑显卡怎么看
- leetcode奇技淫巧-递归中途强制跳出
- LM386喇叭驱动电路
- 2021年福建高考成绩排名查询,福建高考排名对应学校-福建高考位次查询(2021年文科参考)...
- 将一个文件下的所有的TXT文件内容提取出来合并成一个TXT文件
- 操作系统学习笔记-虚拟内存
- 高中历史教师资格证考试成功通过前辈备考经验分享
- 只要还在玩股票一定要好好学习、领会这篇文章
- some以及every的区别
热门文章
- Promise 解析
- MongoDB之python简单交互(三)
- python第四十一天---作业:简单FTP
- codevs 4560 NOIP2015 D2T2 子串
- 从JVM的常见异常来看Tomcat中内存的设置
- Mac 安装laravel 框架
- python自带gui_一个极简易上手的 Python GUI 库
- C#-几个STL相关
- 【Android 启动过程】Activity 启动源码分析 ( ActivityThread -> Activity、主线程阶段 一 )
- 【错误记录】Kotlin 编译报错 ( Smart cast to ‘Xxx‘ is impossible, because ‘xxx‘ is a mutable property ... )