剑指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,显然是迭代计算.递归的问题在于重复计算,而迭代则避免了这一点:递归是自 ...
随机推荐
- python的68个内置函数
内置函数 内置函数就是python给你提供的, 拿来直接用的函数, 比如print., input等. 截止到python版本3.6.2 python一共提供了68个内置函数. #68个内置函数 # ...
- sqlserver 模糊查询,连表,聚合函数,分组
use StudentManageDB go select StudentName,StudentAddress from Students where StudentAddress like '天津 ...
- Version 版本定义规则
Version 定义规则:2.3.1012 主版本号: 表示项目的重大架构变更此版本号: 表示较大范围的功能添加和变化增量版本号: 一般表示重大bug修复2.3.1012snapshot 快照al ...
- Linux下SSL证书申请以及配置到Nginx
wget https://raw.githubusercontent.com/xdtianyu/scripts/master/lets-encrypt/letsencrypt.shchmod +x l ...
- MySQL中授权(grant)和撤销授权(revoke
MySQL 赋予用户权限命令的简单格式可概括为: grant 权限 on 数据库对象 to 用户 一.grant 普通数据用户,查询.插入.更新.删除 数据库中所有表数据的权利 grant s ...
- jQuery操作标签
jQuery操作标签 样式操作: 对标签的样式进行修改,那么操作样式的方法是什么? 样式类: addClass();// 添加指定的CSS类名. removeClass();// 移除指定的CSS类名 ...
- ping -c 3 localhost
linux指令,ping -c count ip,向指定IP发送指定数量的ping包
- Java8之分组
数据库中根据多个条件进行分组 ) from tableA group by a, b 现在不使用sql,而直接使用java编写分组,则通过Java8根据多个条件进行分组代码如下: List<Us ...
- MySQL密码强度验证修改
MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格. 影响的语句和函数有:create user,grant,set password,pas ...
- 0. 资料官网【从零开始学Spring Boot】
[视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...