Fibonacci数列的java实现

关于Fibonacci应该都比较熟悉,0,1,1,2,3.。。。。

基本公式为f(n) = f(n-1) + f(n-2); f(0) = 0; f(1) =1;

方法1:可以运用迭代的方法实现:

public static int f1(int n){
	if(n<=1)
		return n;
	return f1(n-1) + f1(n-2);
}

实现方法简单。

方法2:原理同方法1,

public static int f2(int n){
    int a = 1, b = 1;
    int m = 0;
    if(n <= 2){
        return  1;
    }else{
        for(int i=3; i<=n; i++){
            m = a + b;
            a = b;
            b = m;
        }
    }
    return m;
}
时间: 2024-12-30 00:33:10

Fibonacci数列的java实现的相关文章

蓝桥杯 入门训练 Fibonacci数列(Java)

@Author : qingdujun 入门训练 Fibonacci数列  : http://lx.lanqiao.org/problem.page?gpid=T4 import java.util.Scanner; /** * 蓝桥杯: 入门训练 Fibonacci数列 * @author qingdujun * */ public class Main { public static void main(String[] args) { int f1 = 1; int f2 = 1; int

蓝桥杯算法训练 java算法 Fibonacci数列

问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 55 样例输

Java小程序之fibonacci数列 BigInteger(高精度整型)

package com.java.learning.recursion; import java.math.*; public class MainClass { public static void main(String args[]){ for(int i = 0; i < 100; i++){ f(i+1); } } public static BigInteger f(long n){ if(n <= 2){ return new BigInteger("1");

java单元测试Fibonacci数列

之前写过一个计算Fibonacci数列的算法,很好奇计算那么多次加法会用多长时间,今天用junit测试了一下 下面给出测试代码 测试数据为第5000w个Fibonacci数与10007的余数 当编写测试方法时,经常会发现一些方法在执行前需要创建相同的对象 使用@Before注解一个public void 方法会使该方法在@Test注解方法被执行前执行(那么就可以在该方法中创建相同的对象) 父类的@Before注解方法会在子类的@Before注解方法执行前执行 如果在@Before注解方法中分配了

算法笔记1——蓝桥杯-入门训练 Fibonacci数列

1.问题 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少. 输入格式 输入包含一个整数n. 输出格式 输出一行,包含一个整数,表示Fn除以10007的余数. 说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要能算出这个余数即可,而不需要先计算出Fn的准确值,再将计算的结果除以10007取余数,直接计算余数往往比先算出原数再取余简单. 样例输入 10 样例输出 5

UVA10334 - Ray Through Glasses(Fibonacci数列)

题目链接 题目大意:求光穿过两块玻璃的折射次数的方式数目,我也有点不懂它说什么,但是看图看明白了. 解题思路:画画折射3,4,5,发现话的规律,然后就会发现符合Fibonacci数列,f[n] = f[n - 1] + f[n - 2];但是n很大到1000,需要用大数. 代码: import java.util.*; import java.math.*; import java.io.*; public class Main { static BigInteger f[] = new Big

编程之美 2.9 斐波那契(Fibonacci)数列

编程之美 2.9 斐波那契(Fibonacci)数列 斐波那契的递归表达式如下 F(n)=F(n-1)+F(n-2) n>=2 F(1)=1 F(0)=0 书中提到了三中解决方法 第一种:直接运用递归的方法来进行求解 package org.wrh.programbeautiful; import java.util.Scanner; public class Topic2_9 { public static void main(String[] args) { Topic2_9 t=new T

网易-Fibonacci数列

题目: Fibonacci数列是这样定义的:F[0] = 0F[1] = 1for each i ≥ 2: F[i] = F[i-1] + F[i-2]因此,Fibonacci数列就形如:0, 1, 1, 2, 3, 5, 8, 13, ...,在Fibonacci数列中的数我们称为Fibonacci数.给你一个N,你想让其变为一个Fibonacci数,每一步你可以把当前数字X变为X-1或者X+1,现在给你一个数N求最少需要多少步可以变为Fibonacci数. 输入描述: 输入为一个正整数N(1

青蛙跳台阶(Fibonacci数列)

问题 一只青蛙一次可以跳上 1 级台阶,也可以跳上2 级.求该青蛙跳上一个n 级的台阶总共有多少种跳法. 思路 当n=1时,只有一种跳法,及f(1)=1,当n=2时,有两种跳法,及f(2)=2,当n=3时,可以从n=1直接跳到n=3,也可以从n=2直接跳到n=3,及f(3)=f(1)+f(2)=3...,所以可以使用递归,自顶向下,一步一步求解,但是仔细分析一下,如果n=10,需要求得f(9)和f(8),而f(9)=f(8)+f(7),f(8)=f(7)+f(6),可以很明显看到,求了重复的f(