当前位置:  编程技术>c/c++/嵌入式

C++基本算法思想之递推算法思想

    来源: 互联网  发布时间:2014-10-22

    本文导语:  递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用。递推算法适合有明显公式规律的场合。 递推算法基本思想递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果。递推算法的...

递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用。递推算法适合有明显公式规律的场合。

递推算法基本思想
递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果。递推算法的执行过程如下:

(1)根据已知结果和关系,求解中间结果。

(2)判断是否达到要求,如果没有达到,则继续根据已知结果和关系求解中间结果。如果满足要求,则表示寻找到一个正确答案。

递推算法需要用户知道答案和问题之间的逻辑关系。在许多数学问题中,都有明确的计算公式可以遵循,因此可以采用递推算法来实现。

递推算法示例
数学里面的斐波那契数列是一个使用递推算法的经典例子。

13世纪意大利数学家斐波那契的《算盘书》中记载了典型的兔子产仔问题,其大意如下:

如果一对一个月大的兔子以后每一个月都可以生一对小兔子,而一对新生的兔子出生两个月才可以生出小兔子。也就是,1月份出生,3月份开始产仔。那么假定一年内没有产生兔子死亡事件,那么1年之后共有多少对兔子呢?

1.递归算法
我们来分析一下兔子产仔问题。我们先逐月看每月兔子的对数。

第一个月:1对兔子;

第二个月:1对兔子;

第三个月:2对兔子;

第四个月:3对兔子;

第五个月:5对兔子;

第六个月:8对兔子;

………………

从上面可以看出,从第三个月开始,每个月的兔子总对数等于前两个月兔子数的总和。相应的计算公式如下:

第n个月兔子总数Fn=Fn-1+Fn-2。

这里初始第一个月的兔子数F1=1,第二个月的兔子数F2=1。

可以用递归公式来求解。为了通用型的方便,我们可以编写一个算法,用于计算斐波那契数列问题,按照这个思虑来编写相应的兔子产仔问题的求解算法,示例代码如下:

代码如下:

/*
输入参数n为经历的时间(单位是月),程序中通过递归调用来实现斐波那契数列的计算。
*/
int Fibonacci(n)
{
 int t1,t2;
 if(n>0)
 {
  if(n==1||n==2)
  {
   return 1;
  }
  else
  {
   t1=Fibonacci(n-1);
   t2=Fibonacci(n-2);
   return t1+t2;
  } 
 }
 else
 {
  return 0;
 }
}

递归算法求解兔子产仔问题
有了上述通过的兔子产仔问题算法后,我们可以求解任意的此类问题。这里给出完整的兔子产仔问题求解代码:
代码如下:

#include
using namespace std;
/*
输入参数n为经历的时间(单位是月),程序中通过递归调用来实现斐波那契数列的计算。
*/
int Fibonacci(int n)
{
 int t1,t2;
 if(n>0)
 {
  if(n==1||n==2)
  {
   return 1;
  }
  else
  {
   t1=Fibonacci(n-1);   //递归调用获取F(n-1)
   t2=Fibonacci(n-2);   //递归调用获取F(n-2)
   return t1+t2;
  } 
 }
 else
 {
  return 0;
 }
}
int main()
{
 int n,num;
 cout

    
 
 

您可能感兴趣的文章:

  • 算法之排序算法的算法思想和使用场景总结
  • C++基本算法思想之穷举法
  • c++实现MD5算法代码示例
  • 文本压缩算法C++实现 Golden Huffman
  • 【help】哪里有封装好的RSA算法C++类和C源代码以及例子程序
  • C++实现查找中位数的O(N)算法和Kmin算法
  • 用C或C++编程,模拟可变分区存储管理且首次适应的算法实现存储器的分配与回收
  • C++实现顺序排序算法简单示例代码
  • C++实现汉诺塔算法经典实例
  • C++插入排序算法实例
  • C++选择排序算法实例
  • C++冒泡排序算法实例
  • C++实现N个骰子的点数算法
  • C++泛型算法的一些总结
  • C++归并排序算法实例
  • C++ 冒泡排序数据结构、算法及改进算法
  • C++算法之海量数据处理方法的总结分析
  • C++实现矩阵原地转置算法
  • 利用C++的基本算法实现十个数排序
  • 采用C++实现区间图着色问题(贪心算法)实例详解
  • C++堆排序算法的实现方法
  • C++实现迷宫算法实例解析
  • C++火车入轨算法的实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • <<大话数据结构>>中冒泡排序算法改进
  • 那位高人有任务分配问题的禁忌搜索算法、模拟退火算法的算法实现程序啊
  • 采用C++实现区间图着色问题(贪心算法)实例详解 iis7站长之家
  • 求对称加密DES算法与非对称加密RSA算法!(可用)
  • boost unordered_map和std::list相结合的实现LRU算法
  • 深入串的模式匹配算法(普通算法和KMP算法)的详解
  • 中文网页快速去重算法研究
  • java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
  • 使用java jdk中的LinkedHashMap实现简单的LRU算法
  • 谁能给出一个最快最高效的求素数的算法?(高分求算法)
  • 广告系统中weak-and算法原理及编码验证
  • 谁有这样的算法:给定两个区域,用直线或折线来连接,以及移动其中线段的算法。
  • c语言实现MD5算法完整代码示例
  • 【算法】扑克发牌算法实现
  • MD5算法的C语言实现
  • php加密算法之实现可逆加密算法和解密分享
  • PHP中对各种加密算法、Hash算法的速度测试对比代码
  • 关于加密算法的效率问题
  • 哈希算法计算 Generic Hash and HMAC Program
  • python算法学习之桶排序算法实例(分块排序)
  • 求高效算法




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3