Fibonacci 数列递归 重复计算

public class Fibonacci{
    public static long F(long n){
        System.out.println("call F" + n);
        if (n == 0) return 0;
        if (n == 1) return 1;
        long t = F(n-1) + F (n-2);
        System.out.println("return " + t);
        return t;
    }
    public static void main(String[] args)
    {
        long N = Long.parseLong(args[0]);
        System.out.println(N+"th Fibonacci number is " + F(N));
    }
}

实验结果

java Fibonacci 4
call F4
call F3
call F2
call F1
call F0
return 1
call F1
return 2
call F2
call F1
call F0
return 1
return 3
4th Fibonacci number is 3
时间: 2024-11-05 02:20:18

Fibonacci 数列递归 重复计算的相关文章

Fibonacci数列递归实现

一.什么是Fibonacci数列? 斐波那契数列(Fibonacci sequence),又称黄金分割数列.因数学家列昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为"兔子数列",指的是这样一个数列: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*) 由定义可知,这个数列从第3项开始,每一项都等于前两项之和

fibonacci数列的两种求解方式:基础递归VS动态规划

/* * 基础解法,按照递归方法求解,该算法的运算时间是指数级增长的 * 这种算法对于相似的子问题进行了重复的计算,因此不是一种高效的算法 */ public class FibonacciRecursion { //-----------计算Fibonacci数列值的递归函数-------------- public static int fib(int n){ if(n==1||n==2){//序列中第1,2个数为1 return 1; } return fib(n-1)+fib(n-2);

用递归法计算斐波那契数列的第n项

   斐波纳契数列(Fibonacci Sequence)又称黄金分割数列,指的是这样一个数列:1.1.2.3.5.8.13.21.--在数学上,斐波纳契数列以如下被以递归的方法定义:F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*)在现代物理.准晶体结构.化学等领域,斐波纳契数列都有直接的应用,为此,美国数学会从1960年代起出版了<斐波纳契数列>季刊,专门刊载这方面的研究成果. [Fibonacci.cpp] #include<iostream>#

Python中的函数递归思想,以及对比迭代和递归解决Fibonacci数列

什么是递归?简单的说就是:函数自身调用自身. "普通程序员用迭代,天才程序员用递归" 虽然递归 在运行时会不断出栈压栈,调用底层的寄存器,造成空间上的占用以及时间上的缓慢, 但在一些算法上面仍然是递归很实用 但需要注意的是: #递归是自己调用自己 很消耗时间,还会有消耗空间的危险,所以递归递归一定要知道"归去来兮" #所谓"归去来兮"就是指递归的两个原则: #1.调用了函数自身 #2.设置了自身正确的返回值 (必须有一个正确的返回停止条件,不能无

使用递归,计算斐波那契数列

使用递归,计算斐波那契数列 function fib(num) { if (num > 2) { return fib(num - 2) + fib(num - 1); } else { return 1; } } fib(6) 运行过程 1. return fib(4)+fib(5) 2.return fib(2)+fib(3)+fib(3)+fib(4) 3.return 1+fib(1)+fib(2)+fib(1)+fib(2)+fib(2)+fib(3) 4.return 1+1+1+1

Fibonacci数列的计算和转换

/************************************************************************/ /* GetExtFibonacci */ /* 输入扩展Fibonacci数列的前2个数字first和second,要得到的数字的序列号num */ /* 输入:扩展Fibonacci数列对应的序号的数字 */ /*******************************************************************

数据结构(1)—fibonacci数列的复杂度

开始第二遍复习数据结构,决定把一些有意思的题目做个简单的小结,第一个遇见的是这个经典的Fibonacci数列,题目要求是求这个数列的时间复杂度,对于这个数列,我也不作过多的介绍,下面是对数列的几种简单的实现 1.初始版 long fibonacci1(int n){ if(n==0) return 0; if(n==1) return 1; if(n>1){ return fibonacci1(n-1)+fibonacci1(n-2); } }//递归 这种写法是每一个初学者第一次接触到递归时都

斐波那契数列和反向计算问题

反向计算:编写一个函数将一个整型转换为二进制形式 反向计算问题,递归比循环更简单 分析:需要理解,奇数的二进制最后一位是1,偶数的二进制最后一位一定是0,联想记忆,这个和整型的奇偶性是一致的,1本身就是奇数,0本身是偶数. 十进制整数转换为二进制整数采用"除2取余,逆序排列"法. 具体做法是:用2整除十进制整数,可以得到一个商和余数,再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列

编程之美 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