数据结构与算法之递推算法 C++与PHP实现

数据结构是算法实现的基础,算法总是要依赖于某种数据结构来实现的。往往是在发展一种算法的时候,构建了适合于这种算法的数据结构。一种数据结构如果脱离了算法,也就没有存在的价值了。

算法的作用----解决任何一个实际问题,都不可避免地涉及到算法的问题,通过一定的算法,得到一个最优(或较优)的方案。

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

顺推法:从已知条件出发,逐步推算出要解决的问题的方法。

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

顺推实例:

兔子繁殖过程

c++代码:

#include<iostream>
int main()
{
    using namespace std;
    const int NUM = 13;
    int count = 0;
    int rabbit[NUM] = {1,1};
    for (int i=0; i<NUM-2; i++)
    {
        rabbit[i+2] = rabbit[i] + rabbit[i+1];
    }
    for (int j=0; j<NUM; j++)
    {
        cout << j << "月兔子总数: " << rabbit[j] << "只\n";
    }
    return 0;
}

php代码:

<?php
   $rabbit = array();
   $rabbit[1] = $rabbit[0] =1;
   define("MONTH", 12);
   for ($i=2; $i<=MONTH; $i++) {
       $rabbit[$i] = $rabbit[$i-2] + $rabbit[$i-1];
   }
   for ($i=0; $i<=MONTH; $i++) {
       echo "第 " . $i . " 月,兔子总数量为:". $rabbit[$i] . "只<br/>";
   }
?>

C++编译运行结果

逆推实例:

父亲准备为小龙的四年大学生活一次性储蓄一笔钱,使用整存零取的方式,控制小龙每月月底取1000元准备下月使用。假设银行整存领取的年息为1.71%,请算出父亲至少需要存入多少钱才行。

c++代码:

#include<iostream>
int main()
{
    using namespace std;
    const double RATE = 0.0171;
    double money[48];
    money[47] = 1000;
    for (int i=47; i>0; i--)
    {
        money[i-1] = (money[i] + 1000)/(1+RATE/12);
    }
    for (int j=47; j>0; j--)
    {
        cout << "第 " << j << " 月本利合计为: " << money[j] << " 元\n";
    }
    return 0;
}

php代码:

<?php
    $month = array();
 $month[47] = 1000;
 define("RATE", 0.0171);
 for ($i=47; $i>0; $i--) {
     $month[$i-1] = ($month[$i] + 1000)/(1+RATE/12);
 }
 for ($i=47; $i>0; $i--) {
     echo "第 " . $i . " 月本息合计为:" . $month[$i] . "元<br />";
 }
?>

C++编译运行结果

时间: 2024-10-14 05:19:27

数据结构与算法之递推算法 C++与PHP实现的相关文章

滑动平均滤波算法(递推平均滤波法)

//滑动平均滤波算法(递推平均滤波法) //ADNum为获得的AD数 //GN为数组value_buf[]的元素个数.该函数主要被调用,利用参数的数组传值 const int GN = 12; int filterPtr = 0; bool isFirst = true; public float gSum = 0; float[] gbuf  = new float[GN]; float GlideFilterAD(float ADNum) { if (isFirst) { isFirst =

斐波那契 递推算法

/***Date : 2014.12.10***/ //递推算法:是理性思维模式的代表,根据已有的数据和关系,逐步推导而得出结果. //执行过程:1)根据已知的结果和关系,求解中间结果. ///////////////////// 2)判断是否满足要求,若未满足,则继续根据已知结果和关系求解中间结果:若满足要求,则表示寻找到一个正确答案. //13世纪,意大利数学家斐波那契的<算盘书>中记载:兔子产仔问题. //一对两个月大的兔子,每月都可产仔一对,小兔子两月后的每月也可产仔一对;即1月生,3

数的计数——递推算法

Problem Description 我们要求找出具有下列性质数的个数(包括输入的自然数n).先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理: 不作任何处理: 在它的左边加上一个自然数,但该自然数不能超过原数的一半: 加上数后,继续按此规则进行处理,直到不能再加自然数为止. Input 输入有多组数据,每组数据为自然数n. Output 对于每组数据输出满足条件的数的个数. Sample Input 6 Sample Output 6 Hint 满足条件的数为6,16

组合数递推算法

主要式子:C(n,k)=C(n-1,k-1)+C(n-1,k),C(n,k)表示从n个物品中挑选k个物品的所有组合数. 1 #include<stdio.h> 2 #include<string.h> 3 #define N 10 4 int c[N][N]; 5 void init() 6 { 7 memset(c,0,sizeof(c)); 8 for(int i=0;i<=N;i++) 9 { 10 c[i][0]=1; 11 c[i][i]=1; 12 for(int

c语言递推算法1

递推算法之一:倒推法 1.一般分析思路: if 求解初始条件F1 then begin { 倒推 } 由题意(或递推关系)确定最终结果Fn; 求出倒推关系式Fi-1 =G(Fi ); i=n; { 从最终结果Fn出发进行倒推 } while 当前结果Fi非初始值F1 do 由Fi-1=G(Fi)倒推前项; 输出倒推结果F1和倒推过程; end { of then } else begin { 顺推 } 由题意(或递推关系)确定初始值F1(边界条件); 求出顺推关系式Fi=G(Fi-1); i=1

滑动平均滤波算法(递推平均滤波法)(转帖)

//滑动平均滤波算法(递推平均滤波法)--C语言版 int FilterI=0; //ADNum为获得的AD数 //n为数组value_buf[]的元素个数.该函数主要被调用,利用参数的数组传值 int GlideFilterAD(int value_buf[],int n,int ADNum) { int sum=0; value_buf[FilterI++]=ADNum; if(FilterI==n) FilterI=0; //先进先出,再求平均值 for(int count=0;count

算法入门——递推

主要思想: 通过已知的条件(已知结果),利用特定的关系,逐步递推(顺推/逆推),直到有解或者无解. 主要分为两种:顺推,从已知条件出发,直至推出解. 逆推,从已知结果出发,直至推出解. 需要注意的:每一递推结果,都是下一步递推的条件. 顺推: 斐波那契数列  F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*) 实例 兔子的总数有多少? 一对兔子,每月能生一对,而每对兔子3个月后可以生育.求12个月后共有多少兔子. #include<stdio.h> #define

算法学习——递推之超级素数

算法描述 超级素数定义: m位超级素数本身是素数 最高位开始,去掉一位为m-1位的素数-- 例: 103不是超级素数,去掉最高位的1之后为3,不是有个2位素数,137是一个三位超级素数,去掉最高位1之后为37,37是一个二位素数,去掉3之后为7,7也是一个素数 要求: 输入整数m(1 < m<=10),统计m位超级素数的个数,并输出其中最大的m位超级素数 算法思路 设置一个判断素数的方法 1位素数只有3个,3,5,7,我们可以推测,2位超级素数的个位数只能是3,5,7,没有其他的选择了,同理,

01python算法之递推

递推 1什么是递推?:根据已有节点的值,以及规律推出之后节点的值 2为什么要用递推:简单的解决有规矩事件 3怎么用?: 我们举个经典的例子: 如果1对兔子每月能生1对小兔子,而每对小兔在它出生后的第3个月就可以生1对小兔子,如果从1对初生的小兔子开始,1年后能繁殖多少兔子? def my1(max): a ,b,c ,i= 1,0,0 0 while i<max: c = c+b b = a a = c print a+b+c i+=1 方法:我们可以把兔子分为1个月大的,2个月大的,3个月大的