斐波纳契数算法java_计算斐波那契数(java)

计算斐波那契数(java)

计算斐波那契数

【lintcode】366

描述

查找斐波纳契数列中第 N 个数。

所谓的斐波纳契数列是指:

前2个数是 0 和 1 。

第 i 个数是第 i-1 个数和第i-2 个数的和。

斐波纳契数列的前10个数字是:

0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

以下是用java代码解决的几种方式实现

package com.recursive;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Scanner;

/**

* 计算斐波那契数

* 数列:0 1 1 2 3 5 8 13 21 34 55 89。。。。。

* 下标:0 1 2 3 4 5 6 7 8 9 10 11.。。。。

* 下标:1 2 3 4 5 6 7 8 9 10 11 12

* p

* fib(0) = 0

* fib(1) = 1

* fib(n) = fib(n-2) + fib(n-1) n=2

*/

public class ComputerFibonacci {

public static void main(String[] args) {

int n = 44;

// Scanner input = new Scanner(System.in);

// System.out.println("请输入要计算的斐波那契数的下标值(从0开始):");

// int n = input.nextInt();

long startTime = System.currentTimeMillis();

System.out.println("递归方法输入的斐波那契数的下标值: " + n + ",对应的斐波那契数为 : " + fibonacciRecursive(n));

long endTime = System.currentTimeMillis();

long time = endTime - startTime;

System.out.println("程序运行时间:" + time / 60 + "s");

long startTime2 = System.currentTimeMillis();

System.out.println("迭代方法输入的斐波那契数的下标值: " + n + ",对应的斐波那契数为 : " + fibonacciIteration(n));

long endTime2 = System.currentTimeMillis();

long time2 = endTime2 - startTime2;

System.out.println("程序运行时间:" + time2 / 60 + "s");

long startTime3 = System.currentTimeMillis();

System.out.println("for循环方法输入的斐波那契数的下标值: " + n + ",对应的斐波那契数为 : " + fibonacciFor(n));

long endTime3 = System.currentTimeMillis();

long time3 = endTime3 - startTime3;

System.out.println("程序运行时间:" + time3 / 60 + "s");

long startTime4 = System.currentTimeMillis();

System.out.println("尾递归方法输入的斐波那契数的下标值: " + n + ",对应的斐波那契数为 : " + fibonacciRecursive2(n));

long endTime4 = System.currentTimeMillis();

long time4 = endTime4 - startTime4;

System.out.println("程序运行时间:" + time4 / 60 + "s");

}

/**

* 使用递归

*

* @param n

* @return

*/

public static int fibonacciRecursive(int n) {

if (n == 1) {

return 0;

} else if (n == 2) {

return 1;

} else {

return fibonacciRecursive(n - 2) + fibonacciRecursive(n - 1);

}

}

/**

* 迭代 for

* @param n

* @return

*/

public static int fibonacciIteration(int n) {

int f0 = 0,f1 = 1,currentFib = 0;

if(n == 1) {

return 0;

}

if (n == 2) {

return 1;

}

for (int i = 3; i = n; i++) {

currentFib = f0 + f1;

f0 = f1;

f1 = currentFib;

}

return currentFib;

}

/**

* for循环

*

* @param n

* @return

*/

public static int fibonacciFor(int n) {

int a = 0;

int b = 1;

int c = 0;

int ni = Integer.valueOf(n).toString().length();

if (n == 1) {

c = 0;

} else if (n == 2) {

c = 1;

} else if (n = 3 ni = 32) {

for (int i = 3; i = n; i++) {

c = a + b;

a = b;

b = c;

}

}

return c;

}

/**

* 尾递归

* @param n

* @return

*/

public static int fibonacciRecursive2(int n){

return fib(n,0,1);

}

private static int fib(int n, int a, int b){

if(n==1) {

return a;

}

if(n==2) {

return b;

}

return fib(n-1,b,a+b);

}

}

计算结果:

递归算法参考:

https://www.cnblogs.com/huan-guo/p/8489905.html

计算斐波那契数(java) 相关文章

用解析树计算自定义表达式

不久前,我们遇到了这样的需求:项目方需要对各个业务系统进行监控,如果业务系统的分值低于某个预定的分数,则监控系统会自动为相关负责人发送告警信息。 需求 看起来并不难,我们把资源的状态由高到低分为致命、严重、警告三个级别,整个业务系统的状态受

Python+Excel数据分析实战:军事体能考核成绩评定(七)3公里计算

这一章我们实现男子和女子3000米跑成绩的计算,原始数据是时间,多少分多少秒,全年龄段考核内容都是3公里,但是海拔不同标准不同,是所有科目中最复杂的计算。 一、基本情况 通过分析3000米跑“成绩计算标准表”,发现标准表也只是参照标准表,不是连续的全

【计算机网络】——计算机网络的类别

计算机网络知识梳理 按通信距离分: 广域网、局域网、城域网 按信息交换方式分: 电路交换网、分组交换网、总和交换网 按网络拓扑结构分: 星型网、树型网、环型网、总线网 按通信介质分: 双绞线网、同轴电缆网、光纤网、卫星网 按传输带宽分: 基带网、宽

计算机网络知识总结-自顶向下-中科大讲授

课程目标 基本概念 工作原理 常用技术 课程内容 第1章 什么是因特网 1.1 什么是Internet 网络 :节点和边组成的 节点 :主机节点和数据交换结点 边 :接入链路和主干链路 + 协议。 协议 : TCP/IP来支撑的 分布式的应用以及为分布式应用提供服务的基础设施

解方程【数学推导】

题目 给出两个正整数 \(a,b\),计算满足方程 \(a*x+b*y=x*y\) 的正整数 \((x,y)\) 的组数。\((1\leq t \leq10^3,1\leq n \leq 10^6)\) 题目链接:https://ac.nowcoder.com/acm/contest/10746/E 分析 推导如下: \[\begin{align}ax+by =xy\\y =\frac{ax}{x-b}

006_函数填充_计算列

import pandas as pddef add_2(x): return x + 2if __name__ == '__main__': books = pd.read_excel("C:/Users/123/Desktop/pandas/006_函数填充_计算列/Books.xlsx", index_col="ID") print(books.tail(5)) # 整列操作 books["Price"] = books["ListPrice"]

QuantLib 金融计算——原理之利率互换的分析

目录 QuantLib 金融计算——原理之利率互换的分析 两类分析 互换分析的计算任务 开放问题:如何实现 FR007 互换的相关分析 扩展阅读 以下文字源自我对源代码的理解,如有不同意见,欢迎留言讨论或发邮件( xuruilong100@163.com ) QuantLib 金融计算——原理

欧拉角欧拉矩阵

//计算旋转角double calculateAngle(const Eigen::Vector3d vectorBefore, const Eigen::Vector3d vectorAfter){ double ab, a1, b1, cosr; ab = vectorBefore.x()*vectorAfter.x() + vectorBefore.y()*vectorAfter.y() + vectorBefore.z()*vectorAfter.z();

2021-2-17:Java HashMap 的中 key 的哈希值是如何计算的,为何这么计算

首先,我们知道 HashMap 的底层实现是 开放地址法 + 链地址法 的方式来实现。 即数组 + 链表的实现方式,通过计算哈希值,找到数组对应的位置,如果已存在元素,就加到这个位置的链表上。在 Java 8 之后,链表过长还会转化为红黑树。 这个数组并不是一开始就

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值