C++基本算法思想之递推算法思想
递推算法是非常常用的算法思想,在数学计算等场合有着广泛的应用。递推算法适合有明显公式规律的场合。
递推算法基本思想
递推算法是一种理性思维莫斯的代表,根据已有的数据和关系,逐步推到而得到结果。递推算法的执行过程如下:
(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,得到如图结果:
上一篇:用typedef定义类型详细总结
栏 目:C语言
下一篇:C++中对象的常引用总结
本文标题:C++基本算法思想之递推算法思想
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/3961.html
您可能感兴趣的文章
- 04-02c语言没有round函数 round c语言
- 01-10深入理解C++中常见的关键字含义
- 01-10使用C++实现全排列算法的方法详解
- 01-10深入第K大数问题以及算法概要的详解
- 01-10c++中inline的用法分析
- 01-10深入N皇后问题的两个最高效算法的详解
- 01-10用C++实现DBSCAN聚类算法
- 01-10深入全排列算法及其实现方法
- 01-10全排列算法的非递归实现与递归实现的方法(C++)
- 01-10C++大数模板(推荐)
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10delphi制作wav文件的方法
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 04-02jquery与jsp,用jquery
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-11ajax实现页面的局部加载
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 01-10C#中split用法实例总结
- 01-10SublimeText编译C开发环境设置