《剑指offer》【面试题九:斐波那契数列】

从小白到大神都会遇到的经典面试题 —— 斐波那契数列 文章目录斐波那契数列是什么斐波那契数列面试常问问法递归解法普通递归方法尾递归法迭代解法更快的解法(一):数学方法更快的解法(二):矩阵幂次方(大厂必备)参考文献 写在前面: 博主在春招找实习的过程中呢,百度的二面面试官就让我手撕了跳台阶问题。其本质上呢是斐波那契数列,当时给出了四种解法。但是呢,面试官还是不是很满意。博主苦思冥想也想不出最后一种,最后面试官教了我一种解法,遂连带着一起记录下来。 斐波那契数列是什么 以下内容摘自百度百科: 斐波那契数列(Fibonacci sequence),又称黄金分 阅读详情
面试题九:斐波那契数列

对于需要进行多次重复计算的问题的时候,我们会遇到循环,或者递归。递归是在一个函数的内部调用这个函数本身。而循环则是通过设置计算的初始值及终止条件,在一个范围内重复运算。
递归虽然比较简洁,但是由于递归是函数调用自身,而函数调用是有时间和空间消耗的;每一次函数调用,都需要在内存栈中分配空间以保存参数,返回地址及临时变量,而且往栈里压入数据和弹出数据都需要时间;
除了效率之外,递归还有可能引起更严重的问题:调用栈溢出,我们知道函数在每次调用的时候都会在函数调用点分配空间,而函数调用是在栈上的,所以当进行多次递归调用的话就会出现栈溢出,而相应的循环则不会出现这种问题。

面试题九:斐波那契数列
题目:
写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。
斐波那契定义如下:
0 n = 0;
f(n) = 1 n = 1;
 f(n-1)+f(n-2) n > 1;

定义: 斐波那契数列(Fibonacci sequence),又称黄金分割数列、因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1, F(n)=F(n-1)+F(n-2)(n>=2,n∈N*)

图解:


代码实现:

#include <iostream>
using namespace std;

//递归实现:
long long Fibonacci(int n)
{
	if (n <= 0)
	{
		return 0;
	}
	if (n == 1)
	{
		return 1;
	}
	return Fibonacci(n-1)+Fibonacci(n-2);
}

//循环实现:
long long Fibonacci_round(int n)
{
	long long fib_data1 = 0;
	long long fib_data2 = 1;
	if (n <= 0)
	{
		return fib_data1;
	}
	if (n == 1)
	{
		return fib_data2;
	}
	long long fib_sum = 0;
	for (int i = 2; i<=n; ++i)
	{
		fib_sum = fib_data1+fib_data2;
		fib_data1 = fib_data2;
		fib_data2 = fib_sum;
	}
	return fib_sum;
}

int main()
{
	//递归实现测试用例:
	cout<<"递归实现斐波那契数列:"<<endl;

	//功能测试:斐波那契数列第3项;
	int n1 = 3;
	cout<<"斐波那契数列第"<<n1<<"项值为: "<<Fibonacci(n1)<<endl;
	//功能测试:斐波那契数列第5项;
	int n2 = 5;
	cout<<"斐波那契数列第"<<n2<<"项值为: "<<Fibonacci(n2)<<endl;
	//功能测试:斐波那契数列第10项;
	int n3 = 10;
	cout<<"斐波那契数列第"<<n3<<"项值为: "<<Fibonacci(n3)<<endl;

	//边界值测试:斐波那契数列第0项;
	int n4 = 0;
	cout<<"斐波那契数列第"<<n4<<"项值为: "<<Fibonacci(n4)<<endl;
	//边界值测试:斐波那契数列第1项;
	int n5 = 1;
	cout<<"斐波那契数列第"<<n5<<"项值为: "<<Fibonacci(n5)<<endl;
	//边界值测试:斐波那契数列第2项;
	int n6 = 2;
	cout<<"斐波那契数列第"<<n6<<"项值为: "<<Fibonacci(n6)<<endl;

	//性能测试:斐波那契数列第40项;
	int n7 = 40;
	cout<<"斐波那契数列第"<<n7<<"项值为: "<<Fibonacci(n7)<<endl;
	//性能测试:斐波那契数列第50项;
	int n8 = 50;
	cout<<"斐波那契数列第"<<n8<<"项值为: "<<Fibonacci(n8)<<endl;
	//性能测试:斐波那契数列第100项;
	int n9 = 100;
	cout<<"斐波那契数列第"<<n9<<"项值为: "<<Fibonacci(n9)<<endl;
	

	//循环实现测试用例:
	
	cout<<endl<<endl<<"循环实现斐波那契数列:"<<endl;

	//功能测试:斐波那契数列第3项;
	int n_1 = 3;
	cout<<"斐波那契数列第"<<n_1<<"项值为: "<<Fibonacci_round(n_1)<<endl;
	//功能测试:斐波那契数列第5项;
	int n_2 = 5;
	cout<<"斐波那契数列第"<<n_2<<"项值为: "<<Fibonacci_round(n_2)<<endl;
	//功能测试:斐波那契数列第10项;
	int n_3 = 10;
	cout<<"斐波那契数列第"<<n_3<<"项值为: "<<Fibonacci_round(n_3)<<endl;

	//边界值测试:斐波那契数列第0项;
	int n_4 = 0;
	cout<<"斐波那契数列第"<<n_4<<"项值为: "<<Fibonacci_round(n_4)<<endl;
	//边界值测试:斐波那契数列第1项;
	int n_5 = 1;
	cout<<"斐波那契数列第"<<n_5<<"项值为: "<<Fibonacci_round(n_5)<<endl;
	//边界值测试:斐波那契数列第2项;
	int n_6 = 2;
	cout<<"斐波那契数列第"<<n_6<<"项值为: "<<Fibonacci_round(n_6)<<endl;

	//性能测试:斐波那契数列第40项;
	int n_7 = 40;
	cout<<"斐波那契数列第"<<n_7<<"项值为: "<<Fibonacci_round(n_7)<<endl;
	//性能测试:斐波那契数列第50项;
	int n_8 = 50;
	cout<<"斐波那契数列第"<<n_8<<"项值为: "<<Fibonacci_round(n_8)<<endl;
	//性能测试:斐波那契数列第100项;
	int n_9 = 100;
	cout<<"斐波那契数列第"<<n_9<<"项值为: "<<Fibonacci_round(n_9)<<endl;
	
	return 0;
}

EB Tresos激活失败?3种实用解决方案帮你搞定(含离线激活步骤) 本文针对EB Tresos软件激活失败问题,提供了三种实用的解决方案。详细分析了激活失败的常见根源,并系统阐述了在线环境下的排查步骤、无网环境下的离线激活全流程,以及高级许可证环境修复方法,帮助汽车电子工程师快速恢复开发环境。 阅读详情

相关推荐

利用ORCAD/pspice 仿真分析电路的幅度相位谱

利用ORCAD的pspice仿真分析电路的相位谱1.介绍2.搭建电路原理图3.建立仿真文件,进行交流分析4.仿真、查看输出5.总结 1.介绍 orcad配合pspice一直是电路原理图绘制和仿真的主要工具,pspice工具提供了诸如暂态分析、直流分析、交流分析等多个工具。学校主要教的是multisim,对orcad讲得很少,最进要利用orcad对运放构成的电路的频响、相移特性进行分析,发现资料幅度...

qq_40011737的博客 1万+

斐波那契数列的实现

斐波那契数列 形如1,1,2,3,5,8.........,后面的数是前面两数的和数所排成的数列称为斐波那契数列,那么,我们该怎样计算出他的第n项的数呢?下面是我所会的两种求斐波那契数列的方法。 //递归实现 #include<stdio.h> voidmain() { intn,i,num; printf("n="); scanf("%d",&amp...

weixin_30487317的博客 112

Livox MID360与Fast-LIO2的实战部署指南:从驱动安装到点云处理

本文提供Livox MID360激光雷达与Fast-LIO2激光惯性里程计从零开始的实战部署指南。详细介绍了Ubuntu系统下的驱动安装、网络配置、点云数据验证以及Fast-LIO2算法的编译、参数配置与联合启动流程,帮助开发者快速搭建移动机器人SLAM系统,并包含关键参数调优与常见故障排查方法。

java5的博客 1024

调用函数,求斐波那契数列的第n个元素(采用函数递归)

调用函数,求斐波那契数列的第n个元素(采用函数递归) 编程思路: 1、键入要输入的项数; 2、计算该项元素对应的斐波那契数; 2.1、判断n是否是1或2; 2.2、若是1或2,则输出1; 2.3、否则从3开始遍历每一项,根据斐波那契数列的性质,后一项等于前两项的和; 2.4、返回计算的结果; 3、打印结果。 注意: 1、若采用#if 0;则这个函数递归对应的算法采用了循环,使得算法得到了优化,大大...

gp1330782530的博客 3934

PCB布局布线要求及多层电路板叠加原则

例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考本文主要针对PCB布局布线中的要点进行了总结,并对多层电路板的叠加原则进行了解释。

Ka_wyb的博客 2934

Mac用户看过来!M1/M2芯片安装CiteSpace完整指南(从Homebrew到成功运行)

本文为Mac M1/M2芯片用户提供CiteSpace安装的完整指南,从Homebrew安装适配的Java环境到最终成功运行CiteSpace。详细步骤包括环境检查、Java配置、CiteSpace下载与优化,解决常见问题如内存分配、图形渲染和中文显示乱码,确保科研人员能顺利使用这一文献可视化工具。

weixin_42530458的博客 305

编写一个函数Fibonacci(),要求程序输出第 n 项斐波那契数,n 由用户输入。 斐波那契数列:1,1,2,3,5,8,13,21

编写一个函数Fibonacci(),要求程序输出第 n 项斐波那契数,n 由用户输入。 斐波那契数列:1,1,2,3,5,8,13,21,…… 用户输入n是多少,最后就会输出第几个数。 更多资料请点击:我的目录 #include <stdio.h> int Fibonacci(int n); int main() { printf("请输入一个数:"); int n; sc...

佳佳鸽的博客 1万+

避坑指南:为什么你的conda环境装不上Mamba?从CUDA到ABI的深度排查

本文深入解析conda环境中安装Mamba架构时常见的CUDA版本冲突、ABI不匹配等问题,提供从基础检查到深度排查的系统化解决方案。针对`causal-conv1d`和`mamba-ssm`安装失败场景,详细讲解PyTorch版本绑定、编译器工具链兼容性等关键技术要点,并给出预编译wheel选择、动态链接库配置等实用修复方案。

weixin_33738555的博客 346

求斐波那契数列第二十个数的几种方式

package cn.itcast.Day20;public class DiGuiDemo {         //不死神兔的繁殖问题 //斐波那契数列 1,1,2,3,5,8,13... //获得第二十个 public static void main(String[] args) {        //方式1: int [] array=new int[20]; array[0]=1; ...

zhanbuquan的博客 7478

别再手动下单了!用Python+EasyTrader+同花顺,5分钟搞定你的第一个自动化交易机器人

本文详细介绍了如何使用Python和EasyTrader结合同花顺客户端快速构建自动化交易机器人。从环境配置到实战脚本编写,涵盖自动打新、条件单、跟单策略等核心功能,并分享性能优化与风险控制技巧,帮助投资者高效实现自动化交易。

weixin_30381317的博客 398

TC3XX - MCAL知识点(三十九):AURIX™ TC3xx 的EDSADC实现旋变解码功能(应用笔记记录)

本文总结了英飞凌应用笔记中关于EDSADC旋变解码系统的关键内容。系统通过调幅解调获取电机位置和速度信号,支持内外载波生成方案,其中内部载波方案更常用(需2个DSADC通道)。重点介绍了滤波器链配置建议(避免FIR1)、系统条件要求(如偶数积分周期)以及群延迟计算方法。特别分析了SDCAP功能对硬件延迟的补偿机制,指出温度等因素可能导致外部电路延迟变化,需通过计数器测量并通过软件调整积分器起始点来消除角度误差。文中还提供了不同硬件延迟情况下的信号处理示例。

梦想技术家 459

《剑指Offer》面试题九之斐波那契数列

题目描述编写一个函数,要求输入n,然后打印斐波那契数列的第n项。解题思路一因为在很多书的有关递归的的章节都会拿出这个例子来讲,所以说我们的第一印象就是使用递归来解决这个题目。 public static int getFibonacciIndexN(int n) { if (n <= 0) { return 0; } else if (n

未思 915

VMware16虚拟机:下载和安装教程

VMware16 虚拟机 下载和安装教程

MQ0522的博客 20万+

剑指Offer----面试题九:斐波那契数列

题目: 写一个函数,输入n,求斐波那契数列(Fibonacci)的第n项,斐波那契数列的定义如下: 方法一: 第一种方法就是我们在学习C或者C++语言时接触到的递归调用,程序源代码如下: #include #include #include #include using std::cin; using std::cout; using std::endl; using s

烽火前秦路 1684

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【剑指offer】面试题九:斐波那契数列

题目:写一个函数,输入 n,求斐波那契(Fibonaci)数列的第 n 项。斐波那契数列的定义如下: 解法一、效率低下的递归解法 代码如下: 1 // Fanbonacci.c 2 #include "stdio.h" 3 #include "stdlib.h" 4 5 long long Fabonacci(unsigned int n) 6 {...

weixin_30840573的博客 128

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

大神整理的剑指Offer【所有面试题汇总】

    剑指Offer学习   剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流! 所有代码下载【https://github.com/Wang-Jun-Chao/coding-interviews】 目录 第01-10题 【剑指Offer学习】【面试题02:...

晓飛的博客 3万+

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Java详解剑指offer面试题10--斐波那契数列

Java详解剑指offer面试题10–斐波那契数列 现在要求输入一个整数n,请你输出斐波那契数列的第n项。 我想到的是迭代法,从底向上的方法:先得到f(0)、f(1)的值,然后根据这两个值计算序列后面的值。 package Chap2; public class Fibonacci { /** * 推荐迭代法 */ public int fib(int n) { if (n <= 0) { return 0;

快乐李同学的博客 555

剑指Offer对答如流系列 - 斐波那契数列

面试题9:求斐波那契数列第n项 一、题目描述 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项。斐波那契数列的定义如下: 二、解法讨论 直接写递归的话,是绝对OK的,但是你要明白一个道理,凡是递归能够完成的,递推也能够,而且性能还要优于递归,但是递推写起来总要难于递归。 对于斐波那契数列类型的习题,如果你要直接写递归函数(通常的那种递归,后面会有优化),会出现比较多的重复计算,加...

明月沉江春雾晓 4002

牛客网在线编程专题《剑指offer-面试题9》斐波那契数列

我的个人微信公众号:Microstrong 微信公众号ID:MicrostrongAI 微信公众号介绍:Microstrong(小强)同学主要研究机器学习、深度学习、计算机视觉、智能对话系统相关内容,分享在学习过程中的读书笔记!期待您的关注,欢迎一起学习交流进步! 知乎主页:https://www.zhihu.com/people/MicrostrongAI/activities Git...

Microstrong 5810

(剑指Offer)面试题10- I. 斐波那契数列 & 面试题10- II. 青蛙跳台阶问题

【leetcode】剑指Offer面试题10- I. 10- II面试题10- I. 斐波那契数列面试题10- II. 青蛙跳台阶问题 面试题10- I. 斐波那契数列 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下:F(0) = 0, F(1) = 1,F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契...

Chen_programmer的博客 581

【剑指Offer学习】【所有面试题汇总】

剑指Offer学习  剑指Offer这本书已经学习完了,从中也学习到了不少的东西,现在做一个总的目录,供自已和大家一起参考,学如逆水行舟,不进则退。只有不断地学习才能跟上时候,跟得上技术的潮流!目录第01-10题【剑指Offer学习】【面试题02:实现Singleton 模式——七种实现方式】【剑指Offer学习】【面试题03:二维数组中的查找】【剑指Offer学习】【面试题04:替换空格】【剑指O

https://github.com/Wang-Jun-Chao 5万+

剑指offer10-1 斐波那契数列

剑指offer10-1 斐波那契数列 题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。 解法1:递归 很多新手一上来就会想到用递归,当然,结

weixin_44359566的博客 196

剑指Offer(Python多种思路实现):斐波那契数列

剑指Offer(Python多种思路实现):斐波那契数列 面试10题: 题目:大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项。n<=39 n=0时,f(n)=0 n=1时,f(n)=1 n>1时,f(n)=f(n-1)+f(n-2) 解题思路一:基于循环【推荐】 # 基于循环【推荐】 class Solution: def Fibon...

weixin_44151089的博客 1564

《剑指offer》算法总结

最近找工作,刷了下《剑指offer》这本书,上面有挺多经典的算法,对每一章做了一个总结,章节笔记见一下链接: http://note.youdao.com/noteshare?id=ad655fcf73eb4b63e7e0700daa01d02f 下面是对整本书的一个算法,从数据结构上进行分类,这样拿到算法题的时候知道从哪一个类别去思考相似的可能性。 一、线性表 1、数组 2、链表 二、字符串 三...

Zuoerfeng 4950

【剑指Offer】面试题10. 斐波那契数列

题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1)= 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:100000...

胡图图 822

剑指Offer - 面试题10- I. 斐波那契数列

1. 题目 写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项。斐波那契数列的定义如下: F(0) = 0, F(1) = 1 F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 斐波那契数列由0和1开始,之后的斐波那契数就是由之前的两数相加而得出。 答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,...

Michael是个半路程序员 1544
上一篇: 《剑指offer》【面试题八:旋转数组的最小数字】
下一篇: 《剑指offer》【面试题10:二进制中1的个数】
IT_model
博客等级 码龄9年 61粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值