递归算法——求取斐波那契数列(2)

import java.util.Scanner;

/**
 * Created by Administrator on 14-5-13.
 * 改进的计算斐波那契数列的方法,利用参数,经过测试运行时间会成倍减少 测试数据n=40
 * 尾递归的本质是:将单次计算的结果缓存起来,传递给下次调用,相当于自动累积。
 * 尾部递归是一种编程技巧。递归函数是指一些会在函数内调用自己的函数,
 * 如果在递归函数中,递归调用返回的结果总被直接返回,则称为尾部递归。
 * 尾部递归的函数有助将算法转化成函数编程语言,
 * 而且从编译器角度来说,亦容易优化成为普通循环。
 * 这是因为从电脑的基本面来说,所有的循环都是利用重复移跳到代码的开头来实现的。
 * 如果有尾部归递,就只需要叠套一个堆栈,因为电脑只需要将函数的参数改变再重新调用一次。
 * 利用尾部递归最主要的目的是要优化,例如在Scheme语言中,明确规定必须针对尾部递归作优化。
 * 可见尾部递归的作用,是非常依赖于具体实现的。
 */
public class Fib1 {
    public static void main(String[] args){
        long startTime=System.currentTimeMillis();   //获取开始时间
        int number=0;
        System.out.println("please give the number:");
        Scanner scanner=new Scanner(System.in);
        String str=scanner.nextLine();
        try{
            number=Integer.parseInt(str);
        }catch(NumberFormatException e){
            System.out.println("输入有误");
        }

        System.out.println(fac(number,1,1));
        long endTime=System.currentTimeMillis(); //获取结束时间
        System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
    }
    public static int fac(int temp,int f1,int f2){
        if(temp<2)
        {
            return f1;
        }
        else {
            System.out.println("fac("+(temp-1)+‘ ‘+f2+‘,‘+(f1+f2)+")");
            return  fac(temp-1,f2,f2+f1);
        }

    }
}

递归算法——求取斐波那契数列(2),布布扣,bubuko.com

时间: 2024-10-16 14:11:44

递归算法——求取斐波那契数列(2)的相关文章

递归算法——求取斐波那契数列(1)

import java.util.Scanner; /** * Created by Administrator on 14-5-13. * 计算斐波那契数列 * * Result M(Problem prob) { if (<problem can be solved easily>) return <easy solution>; // The problem cannot be solved easily. Problem smaller1 = <reduce prob

算法导论-求(Fibonacci)斐波那契数列算法对比

目录 1.斐波那契数列(Fibonacci)介绍 2.朴素递归算法(Naive recursive algorithm) 3.朴素递归平方算法(Naive recursive squaring) 4 .自底向上算法(Bottom-up) 5. 递归平方算法(Recursive squaring) 6.完整代码(c++) 7.参考资料 内容 1.斐波那契数列(Fibonacci)介绍 Fibonacci数列应该也算是耳熟能详,它的递归定义如上图所示. 下面2-6分别说明求取Fibonacci数列的

python3 求斐波那契数列(Fibonacci sequence)

输出斐波那契数列的前多少个数. 利用函数 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuhung Wan # ----斐波那契数列(Fibonacci sequence)----- def check_num(number:str): ''' 对输入的字符串检查,正整数,返回Ture,否则返回False :param number: 输入的字符串 :return: 符合要求,返回Ture,不符合返回False ''' # 输入不

hdu--4549 M斐波那契数列

Problem Description M斐波那契数列F[n]是一种整数数列,它的定义如下: F[0] = aF[1] = bF[n] = F[n-1] * F[n-2] ( n > 1 ) 现在给出a, b, n,你能求出F[n]的值吗? Input 输入包含多组测试数据:每组数据占一行,包含3个整数a, b, n( 0 <= a, b, n <= 10^9 ) Output 对每组测试数据请输出一个整数F[n],由于F[n]可能很大,你只需输出F[n]对1000000007取模后的值

递归思想之---斐波拉契数列

斐波那契数列中的递归思想 ??如果上述的分析都明白了,那就说明你已掌握了递归,但为了加深对递归的理解,我们再来看一个思考题(来自程序员的数学思考题),题目是这样的,假如动物中有一种特殊的种类,它出生2天后就开始以每天1只的速度繁殖后代.假设第1天,有1只这样的动物(该动物刚出生,从第3天开始繁殖后代).那么到第11天,共有多少只呢? 我们先来按一般顺序思考,先不要考虑第11天,先从第1天开始,看能不能找出规律: [第1天]只有1只动物 [第2天]只有1只动物,还没有繁殖后代,总量为1 [第3天]

ACM2 斐波那契数列

描述 在数学上,斐波那契数列(Fibonacci Sequence),是以递归的方法来定义: F0 = 0 F1 = 1 Fn = Fn - 1 + Fn - 2 用文字来说,就是斐波那契数列由0和1开始,之后的斐波那契数就由之前的两数相加.首几个斐波那契数是: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946,……………… 特别指出:0不是第一项,而是第

快速求斐波那契数列(矩阵乘法+快速幂)

斐波那契数列 给你一个n:f(n)=f(n-1)+f(n-2) 请求出 f(f(n)),由于结果很大请 对答案 mod 10^9+7; 1<=n<=10^100; 用矩阵乘法+快速幂求斐波那契数列是经典应用: 矩阵公式 C i j=C i k *C k j; 根据递推式 构造2*2矩阵: 原始矩阵 1 0 0 1 矩阵 2 1 1 1 0 原始矩阵与矩阵 2相乘达到转化状态效果: 对矩阵二进行快速幂 乘法:达到快速转化矩阵的效果: 即使达到快速转化状态:那么大的数据范围也很难求解: 高精?这有

利用矩阵求斐波那契数列

利用矩阵求斐波那契数列 flyfish 2015-8-27 矩阵(matrix)定义 一个m*n的矩阵是一个由m行n列元素排成的矩形阵列.矩阵里的元素可以是数字符号或者数学式. 形如 {acbd} 的数表称为二阶矩阵,它由二行二列组成,其中a,b,c,d称为这个矩阵的元素. 形如 {x1x2} 的有序对称为列向量Column vector 设 A={acbd} X={x1x2} 则 Y={ax1+bx2cx1+dx2} 称为二阶矩阵A与平面向量X的乘积,记为AX=Y 斐波那契(Fibonacci

递归求斐波那契数列

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Console.Write("输入想求的斐波那契数列项数:"); int n = Conver