剑指offer例题——裴波那契数列
编程题:大家都知道裴波那契数列,现在要求输入一个整数n,请你输出裴波那契数列的第n项(从0开始,第0项为0)。n<=39
public class Solution {
public int Fibonacci(int n) {
Double a = 1/Math.sqrt(5)*(Math.pow(((1+Math.sqrt(5))/2),n)-Math.pow(((1-Math.sqrt(5))/2),n));
int b = a.intValue();
return b;
}
}
第一遍程序,结果运行时间和占用内存都不理想。
裴波那契数列,嗯。。。我不属于“大家都知道”系列,先百度该数列,想起来了,这是高中数学接触的生兔子问题,即1、1、2、3、5、8、13、21、34、……其遵循F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*)
由于查到其有一个通项公式:
而且,n=0,1,2也都遵循该通式,故我的编程即从其入手。
在上述运算过程中遇到的第一个问题,即sqrt与pow函数的使用,然后是Double到int的强制类型转换,我发现double无法强制转换为int,百度后,发现需要改为Double。
double和Double的关系就像int和Integer的关系一样。一个是基本类型,一个是封装类类型。而基本类型是无法调用方法的,故需要用Double。
之后查看大神的讨论,采用了迭代的方法求得了新程序。
public class Solution {
public int Fibonacci(int n) {
int a = 1;
int b = 0;
int c = 0;
if (n==0|n==1)
return n;
else
for(int i = 2;i<=n;i++){
c = a+b;
b = a;
a = c;
}
return c;
}
}
第二次编程,迭代部分已经编写出来了,但是运行始终出错,后来发现有三处错误:
1)for的使用中,三部分之间用;符号隔离;
2)对for循环中的i进行初始化时,忽略了类型int;
3)对实例变量进行声明的时候,将其放在了else后面,结果一直提示错误。
技巧:
1)利用通式计算既耗时,又耗内存,而利用迭代,则时间和资源耗费都减少了。
该次实战的经验:
1)函数调用要符合规范;
2)自己对于错误提示还不太会看,否则改起来应该会更快一点。
剑指offer例题——裴波那契数列的更多相关文章
- 剑指Offer之裴波那契数列
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0,第1项是1). n<=39 解法1:递归解法 public int Fibonacc ...
- 《剑指offer》斐波那契数列
本题来自<剑指offer> 斐波那契数列 矩阵覆盖 题目一: 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0).n<=39 思路: ...
- 剑指offer:斐波那契数列
目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:斐波那契数列 题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n< ...
- 力扣 - 剑指 Offer 10- I. 斐波那契数列
题目 剑指 Offer 10- I. 斐波那契数列 思路1(递归 / 自顶向下) 这题是很常见的一道入门递归题,可以采用自顶向下的递归方法,比如我们要求第n个位置的值,根据斐波那契数列的定义fib(n ...
- 【Java】 剑指offer(9) 斐波那契数列及青蛙跳台阶问题
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 写一个函数,输入n,求斐波那契(Fibonacci)数列的第n项 ...
- Go语言实现:【剑指offer】斐波那契数列
该题目来源于牛客网<剑指offer>专题. 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0) n<=39 Go语言实现: 递归: ...
- 剑指offer三: 斐波拉契数列
斐波拉契数列是指这样一个数列: F(1)=1; F(2)=1; F(n)=F(n-1)+F(n); public class Solution { public int Fibonacci(int n ...
- 剑指Offer 7. 斐波那契数列 (递归)
题目描述 大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项(从0开始,第0项为0). n<=39 题目地址 https://www.nowcoder.com/prac ...
- 《剑指offer》-斐波那契数列
大家都知道斐波那契数列,现在要求输入一个整数n,请你输出斐波那契数列的第n项. n<=39 这么直接的问fibonacci,显然是迭代计算.递归的问题在于重复计算,而迭代则避免了这一点:递归是自 ...
随机推荐
- rabbitmq的vhost与用户管理(转)
原文地址:https://blog.csdn.net/leisure_life/article/details/78707338 当我们在创建用户时,会指定用户能访问一个虚拟机,并且该用户只能访问该虚 ...
- CyclicBarrier循环屏障相关
简介 CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会 ...
- orcale 函数wm_concat不存咋lob值使用zh_concat 替换
create or replace TYPE zh_concat_im AUTHID CURRENT_USER AS OBJECT ( CURR_STR VARCHAR2(32767), STATIC ...
- (转)C#读写共享文件
原文地址:https://www.cnblogs.com/guohu/p/4694515.html using System; using System.Collections.Generic; us ...
- Mapreduce入门和优化方案
MapReduce基本原理和高性能网络下优化: Mapreduce概述 Mapreduce式谷歌开源的一项重要技术,是一个编程模型,用来进行大数据量的计算,对于大数据量的计算通常采用的处理方式式并行计 ...
- JQuery加载列表实现动画滚动(自上而下挤)
这个例子是jquery动态加载列表,并通过定时刷新,实现其循环滚动效果的一个例子. 1.HTML代码: <div class="fake-table"> <li ...
- sql中的in与not in,exists与not exists的区别
1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询,一直以来认为exists比in效率高的说法是不准确的.如果查询的两个表 ...
- 在html中使用thymeleaf编写通用模块
在编写页面时,常常会需要用到通用模块,比如header部分.footer部分等. 项目前端使用的是themeleaf模板引擎,下面简单介绍下使用themeleaf写header通用模块: 1. 通用部 ...
- 图算法之——dijkstra算法
一.算法特点 目标:找出加权图中前往X的最短路径 适用于:无环有向加权图,且各边的权值为正 二.算法思路 三.算法示例演示 如下图,请找出结点v1到其他各个结点的最短路径: 首先创建一个字典(散列表) ...
- docker unbuntu 32-bit 更新apt-get
1.vi /etc/apt/sources.list deb http://mirrors.aliyun.com/debian wheezy main contrib non-free deb-src ...