001-算法-递推法

一、概念: 递推算法是一种简单的算法,即通过已知条件,利用特定关系得出中间推论,直至得到结果的算法。递推分为顺推和逆推两种。

递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。

顺推法:是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。

逆推法:是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。

demo :

http://blog.csdn.net/jtlyuan/article/details/7185110

eg:斐波拉契数列

code:

/**
 * @declare 顺推法:是指从已知条件出发,逐步推算出要解决问题的方法。<br>
 *          例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。<br>
 * @author: cphmvp
 * @version: 1.0
 * @date: 2014年7月29日上午9:58:52
 */
public class Recurrence {
    public int fibonacci(int n) {
        int[] f = new int[n];
        f[0] = 1;
        f[1] = 1;
        for (int i = 2; i < n; i++) {
            f[i] = f[i - 1] + f[i - 2];
        }
        return f[n - 1];
    }

    public static void main(String[] args) {
        Recurrence recurrence = new Recurrence();
        int fibonacci = recurrence.fibonacci(10);
        System.out.println(fibonacci);
    }
}

001-算法-递推法

时间: 2024-12-11 09:17:31

001-算法-递推法的相关文章

算法基础二 递推法

/*递推法*/ /*斐波那契数列 1 1 2 3 5 8 13..... f(n)?*/ /*递推法的特点是由前向后推算,因此注意起始条件,并在推算过程中保存结果供下一步推算使用~*/ #include<iostream> using namespace std; int f1(int n) { if (n < 3)return 1; else { int t1 = 1; int t2 = 1; for (int i = 2; i < n; i++) { int temp = t1

算法设计 之 递推法

递推法就是根据已知条件,分析推导出问题中的联系,然后一步一步进行推倒直至得到结果. 根据具体问题我们需要选择是正推还是逆推来解决问题. 下面先举一个递推中的经典例子,就是求兔子数量的问题: 现有一只一个月大的兔子,已知当兔子在第三个月大时每月就可以生下一只小兔子(好吧,就按兔子是无性繁殖的),求一年后兔子的总数量. 我们根据问题分析,发现可以把兔子分三类:一个月大.二个月大.三个或三个以上月大,列表分析: 月份 1月大 2月大 >=3月大 1 1 0 0 2 0 1 0 3 1 0 1 4 1

算法--递推策略

本文地址:http://www.cnblogs.com/archimedes/p/4265019.html,转载请注明源地址. 递推法是一种重要的数学方法,在数学的各个领域中都有广泛的运用,也是计算机用于数值计算的一个重要算法.这种算法特点是:一个问题的求解需一系列的计算,在已知条件和所求问题之间总存在着某种相互联系的关系,在计算时,如果可以找到前后过程之间的数量关系(即递推式),那么,从问题出发逐步推到已知条件,此种方法叫逆推.无论顺推还是逆推,其关键是要找到递推式.这种处理问题的方法能使复杂

递推(一):递推法的基本思想

所谓递推,是指从已知的初始条件出发,依据某种递推关系,逐次推出所要求的各中间结果及最后结果.其中初始条件或是问题本身已经给定,或是通过对问题的分析与化简后确定. 利用递推算法求问题规模为n的解的基本思想是:当n=1时,解或为已知,或能非常方便地求得:通过采用递推法构造算法的递推性质,能从已求得的规模为1.2.….i−1的一系列解,构造出问题规模为i的解.这样,程序可从i=0或i=1出发,重复地由已知至i−1规模的解,通过递推,获得规模为i的解,直至获得规模为n的解. 可用递推算法求解的问题一般有

递推(二):递推法的应用

下面通过一些典型实例及其扩展来讨论递推法的应用. [例2]骨牌铺方格 在2×n的一个长方形方格中,用一种2×1的骨牌铺满方格.输入n(n<=40),输出铺放方案的总数. 例如n=3时,为2×3方格,骨牌的铺放方案有三种,如下图1所示. 图1  2×3方格的骨牌铺放方案 (1)编程思路. 设f[i]为铺满2*n方格的方案数,则有    f[i]=f[i-1]+f[i-2]. 其中,f[i-1]为铺满2*(n-1)方格的方案数(既然前面的2*(n-1)的方格已经铺满,那么最后一个只能是竖着放).f[

实用算法的分析与程序设计——递推法(顺推法)包含实例,代码

顺推法即由边界条件出发,通过递推关系式推出后项值,再由后项值按递推关系式推出再后项值...依次递推,直至从问题初始陈述向前推进到这个问题的解为止. 实例 代码 #include<iostream> #include<stdlib.h> using namespace std; const int maxN = 60 ; int N = 4 ,d = 2 , m = 3; float a1 = 2 ,an = 5; void input() { cout<<"i

实用算法的分析与程序设计——递推法(贮油点 含算法分析、代码)

倒推法 所谓倒推法就是在不知初始值的情况下,经某种递推关系而获知问题的解或目标,再倒过来,推知它的初始条件,因为这类问题的运算过程是一一映射的,故可分析得其递推公式.然后再从这个解或目标出发,采用倒推手段,一步步地倒推到这个问题的初始陈述. 贮油点 一辆重型卡车欲穿越1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升,显然卡车装一次油是过不了沙漠的.因此四级必须设法在沿途建立几个储油点,使卡车能顺利穿越沙漠,试问司机如何建立这些贮油点?每一贮油点应存多少汽油,才能使卡车以消耗最

实用算法的分析与程序设计——递推法(倒推法)

倒推法就是在不知初始值的情况下,经某种递推关系而获知问题的解或目标,再倒过来,推知它的初始条件.因为这类问题的运算过程是一一映射的,故可分析得其递推公式,然后再从这个解或目标出发,采用倒推手段,一步步地倒推到这个问题的初始陈述. 贮油点 一辆重型卡车欲穿过1000公里的沙漠,卡车耗油为1升/公里,卡车总载油能力为500公升,显然卡车装一次油是过不了沙漠的,因此四级必须设法在沿途建立几个贮油点,使卡车能顺利穿越沙漠,试问司机如何建立这些贮油点?每一贮油点应存多少汽油,才能使卡车以消耗最少汽油的代价

约瑟夫环-公式递推法

约瑟夫问题 约瑟夫问题是个著名的问题:N个人围成一圈,第一个人从1开始报数,报M的将被杀掉,下一个人接着从1开始报.如此反复,最后剩下一个,求最后的胜利者. 例如只有三个人,把他们叫做A.B.C,他们围成一圈,从A开始报数,假设报2的人被杀掉. 首先A开始报数,他报1.侥幸逃过一劫. 然后轮到B报数,他报2.非常惨,他被杀了 C接着从1开始报数 接着轮到A报数,他报2.也被杀死了. 最终胜利者是C 解决方案 普通解法 刚学数据结构的时候,我们可能用链表的方法去模拟这个过程,N个人看作是N个链表节