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

 更新时间:2013年10月14日 08:56:49   作者:  
递推算法需要用户知道答案和问题之间的逻辑关系。在许多数学问题中,都有明确的计算公式可以遵循,因此可以采用递推算法来实现

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

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

(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<iostream>
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<<"递推算法求解兔子产仔问题:"<<endl;
 cout<<"请输入时间:"<<endl;
 cin>>n;
 num=Fibonacci(n);
 cout<<"经过"<<n<<"个月之后"<<endl;
 cout<<"兔子的数量为:"<<num<<"对"<<endl;
 return 0;
}

执行该程序,用户输入12,得到如图结果:

您可能感兴趣的文章:

相关文章

  • C++中Qt的安装与配置步骤详解

    C++中Qt的安装与配置步骤详解

    Qt是一种C++编程框架,用于构建图形用户界面(GUI)应用程序和嵌入式系统,无论是初学者还是经验丰富的开发者,Qt都为构建高质量、可维护的应用程序提供了丰富的工具和支持,本文主要给大家介绍了C++中Qt的安装与配置步骤,需要的朋友可以参考下
    2023-12-12
  • 基于QT绘制一个漂亮的预警仪表

    基于QT绘制一个漂亮的预警仪表

    这篇文章主要为大家详细介绍了如何基于QT绘制一个漂亮的预警仪表,文中的示例代码讲解详细,具有一定的学习价值,感兴趣的可以了解一下
    2023-04-04
  • Qt实现获取基本网络信息

    Qt实现获取基本网络信息

    这篇文章主要为大家详细介绍了Qt实现获取基本网络信息的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • 一文详解C语言操作符

    一文详解C语言操作符

    这篇文章主要详细介绍了C语言的操作符,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • C语言实现推箱子游戏的代码示例

    C语言实现推箱子游戏的代码示例

    这篇文章主要介绍了C语言实现推箱子游戏的代码示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • C语言库函数中qsort()的用法

    C语言库函数中qsort()的用法

    大家好,本篇文章主要讲的是C语言库函数中qsort()的用法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • 使用C语言操作树莓派GPIO的详细步骤

    使用C语言操作树莓派GPIO的详细步骤

    今天抽空给大家普及使用C语言操作树莓派GPIO的详细步骤,本文大概分五步给大家介绍树莓派GPIO安装步骤,首先需要安装GPIO库然后进行一步步设置,具体操作方法跟随小编一起学习吧
    2021-06-06
  • C语言实现运筹学中的马氏决策算法实例

    C语言实现运筹学中的马氏决策算法实例

    这篇文章主要介绍了C语言实现运筹学中的马氏决策算法,简单介绍了马氏决策的概念,并结合实例形式分析了C语言实现马氏决策算法的具体实现技巧,需要的朋友可以参考下
    2017-09-09
  • C++深入讲解对象的销毁之析构函数

    C++深入讲解对象的销毁之析构函数

    构造函数在创建对象时被系统自动调用,而析构函数(Destructor)在对象被撤销时被自动调用,相比构造函数,析构函数要简单的多
    2022-04-04
  • 数据结构之堆的具体使用

    数据结构之堆的具体使用

    本文主要介绍了数据结构之堆的具体使用,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02

最新评论