博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《剑指Offer》斐波那契数列
阅读量:4097 次
发布时间:2019-05-25

本文共 981 字,大约阅读时间需要 3 分钟。

题目描述

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

思路:这个题太简单了,思路不说了

1. 递归方法:

class Solution {public:    int Fibonacci(int n) {        if (n == 0 ){            return  0;        }        else if(n==1||n==2){            return  1;        }        else{            return Fibonacci(n - 1) + Fibonacci(n - 2);        }    }};

运行结果:运行时间: 750 ms 占用内存:8568K 状态:答案正确

2. 换代方法:

class Solution {public:    int Fibonacci(int n) {        int fib[40]={
0,1}; int i=2; for(;i<=n;++i){ fib[i]=fib[i-1]+fib[i-2]; } return fib[n]; }};

运行结果: 运行时间: <1 ms 占用内存:8568K 状态:答案正确

总结:刚开始对递归的理解不够深刻,跑出来的结果吓一跳,真的太慢了!!!

原因:
测试用例里肯定准备着一个超大的n来让Stack Overflow,为什么会溢出?因为重复计算,而且重复的情况还很严重,举个小点的例子,n=4,看看程序怎么跑的:
Fibonacci(4) = Fibonacci(3) + Fibonacci(2);
= Fibonacci(2) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
= Fibonacci(1) + Fibonacci(0) + Fibonacci(1) + Fibonacci(1) + Fibonacci(0);
由于我们的代码并没有记录Fibonacci(1)和Fibonacci(0)的结果,对于程序来说它每次递归都是未知的,因此光是n=4时f(1)就重复计算了3次之多。

转载地址:http://cimii.baihongyu.com/

你可能感兴趣的文章
Java的时间操作玩法实例若干
查看>>
JavaScript:时间日期格式验证大全
查看>>
XML工具代码:SAX从String字符串XML内获取指定节点或属性的值
查看>>
时间日期:获取两个日期相差几天
查看>>
责任链模式 Chain of Responsibility
查看>>
高并发与大数据解决方案概述
查看>>
解决SimpleDateFormat线程安全问题NumberFormatException: multiple points
查看>>
MySQL数据库存储引擎简介
查看>>
处理Maven本地仓库.lastUpdated文件
查看>>
Java并发编程1-线程池
查看>>
CentOS7,玩转samba服务,基于身份验证的共享
查看>>
计算机网络-网络协议模型
查看>>
计算机网络-OSI各层概述
查看>>
Java--String/StringBuffer/StringBuilder区别
查看>>
mySQL--深入理解事务隔离级别
查看>>
分布式之redis复习精讲
查看>>
数据结构与算法7-栈
查看>>
线性数据结构学习笔记
查看>>
Java并发编程 | 一不小心就死锁了,怎么办?
查看>>
(python版)《剑指Offer》JZ01:二维数组中的查找
查看>>