(斐波那契总结)Write a method to generate the nth Fibonacci number (CC150 8.1)

根据CC150的解决方式和Introduction to Java programming总结:

使用了两种方式,递归和迭代

CC150提供的代码比较简洁,不过某些细节需要分析。

现在直接运行代码,输入n(其中用number代替,以免和方法中的n混淆)的值,可以得出斐波那契数。

代码如下:

/*  CC150 8.1
    Write a method to generate the nth Fibonacci number
    Author : Mengyang Rao
    note : Use two methods ,Iteration and Recursion
    Date : 2015-02-25 23:56:00
*/

import java.util.Scanner;
public class TestFibonacci {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.print("Please enter n :");
        int number = input.nextInt();
        System.out.println("The Iteration number is : " + fibonacci(number) + "\n n value is : " + number);
        System.out.println("The Recursion number is : " + fibo(number) + "\n n value is : " + number);
    }
// Version: Recursion
    public static long fibo(long n ) {
    if(n == 0)
        return 0;
    else if (n == 1)
        return 1;
    else if (n > 1)
        return fibo(n - 1) + fibo(n - 2);
    else
        return -1;
}
//  Version: Iteration
    public static long fibonacci(long n) {
        int a = 0, b = 1;
        if (n < 0)
            return -1;
        else if (n == 0)
            return 0;
        for (int i = 3; i <= n; i++) {
            int c = a + b;
            a = b;
            b = c;
        }
        return b;
    }
}
时间: 2025-01-02 19:18:03

(斐波那契总结)Write a method to generate the nth Fibonacci number (CC150 8.1)的相关文章

从斐波那契开始了解尾递归

尾递归(tail recursive),看名字就知道是某种形式的递归.简单的说递归就是函数自己调用自己.那尾递归和递归之间的差别就只能体现在参数上了. 尾递归wiki解释如下:豪享博娱乐城 尾部递归是一种编程技巧.递归函数是指一些会在函数内调用自己的函数,如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归.尾部递归的函数有助将算法转化成函数编程语言,而且从编译器角度来说,亦容易优化成为普通循环.这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的.如果有尾部归

递归和非递归方法实现斐波那契

斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci[1]  )以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.--.在数学上,斐波纳契数列以如下被以递归的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用. 斐波那契递归算法实现.

Talking About斐波那契数列(三种实现方法)

一直学习数据结构和算法,虽然学的没有太好,但还是觉得应该做一些有意思的程序来实现以下~牛客网(大哥推荐,还有就是..不要问我大哥是谁~~)有剑指Offer系列很多的题目,不管是大神还是..应该去做一下,感受编程的魅力~~(首先承认自己还是有很多不足的地方,但尽量去完善每一行代码~)  废话少说,代码搞起~ import java.util.Scanner; /** * 现在要求输入一个整数n,请你输出斐波那契数列的第n项. * 斐波那契数列,又称黄金分割数列,指的是这样一个数列 0, 1, 1,

给定斐波那契数列的项数求对应的数值的普通方法和优化处理

1 /** 2 给定斐波那契数列的项数求对应的数值 3 参考:剑指Offer 4 */ 5 #include <stdio.h> 6 7 int fib(int n); 8 long long fibonacci(unsigned int n); 9 int main(int argc, const char * argv[]) { 10 11 int n; 12 13 while (1) { 14 15 printf("请输入你想知道到的斐波那契数列的项数:\t"); 1

9.求斐波那契Fibonacci数列通项

(1)递归实现: #include<iostream>using namespace std;int Fibonacci(int); int main(){    int n;    cout<<"please input an number n: "<<endl;    cin>>n; for(int i=1;i<=n;i++)    {        cout<<Fibonacci(i)<<endl; 

1 斐波那契的兔子

1 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少? 2 程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....    3 斐波那契数列, Sn = Sn-1+Sn-2 思路分析: 这是一道数学问题,思路就是,首先你要知道递归的概念,什么是递归,递归在编程里就是一个判断 一般用if语句实现 if(条件一){ 执行一 }else { 这行这里的递归 } 一般这种问题都是有一个条件是死

Java实现斐波那契数列Fibonacci

import java.util.Scanner; public class Fibonacci { public static void main(String[] args) { // TODO Auto-generated method stub Scanner in=new Scanner(System.in); System.out.println("斐波那契数列的个数是:"); int total=in.nextInt(); System.out.println("

求解斐波那契数列的第n项

对于Fibonacci数列,1,1,2,3,5,8,12,...求解第n项值,我们通常用的是递归算法,即递推式f(n) = f(n-1)+f(n-2).然而这其实是一种效率极低的算法,当n达到41时,就已经需要1s左右,随着n的增加,时间是指数级增长的. 因为该递归算法有太多的重复计算,如下图所示,所用时间T(n) = T(n-1)+T(n-2)+Θ(1),可以知道T(n)有Ω((3/2)n)的下界,T(n)<O(2^n),可以看到这是指数级的时间复杂度. 具体代码实现如下: Elemtype

斐波那契数列算法

斐波那契数列具有一个通式: 当n>2时,f(n)=f(n-1)+f(n-2):当n=1或n=2时,f(1)=f(2)=1. 代码实现: package com.lk.C; public class Test4 { public static int compute(int index){ if((index == 1)||(index == 2)){ return 1; }else{ return compute(index-1)+compute(index-2); } } public sta