算法思想篇(2)————递推算法
来源:互联网 发布:java 角色权限管理 编辑:程序博客网 时间:2024/06/11 11:03
递推算法不断利用已有的信息推导出新的东西。在日常应用中有如下两种递推算法。
(1)顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。
(2)逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
用两个例子说明枚举算法的思想:
(1)菲波那切数列的“兔子问题”:一般而言,兔子在出生两个月后就有了繁衍能力一对兔子每个月能生出一对小兔子来,如果所有的兔子都不死,那么一年以后可以繁衍多少对兔子?
代码如下:
//start from the very beginning,and to create greatness//@author: Chuangwei Lin//@E-mail:979951191@qq.com//@brief: 菲波那切数列递推#include <stdio.h>#define NUM 13//定义常量,第0个月到12月int main() { int i; long fib[NUM] = {1,1}; //前两个月的数量 for(i=2;i<NUM;i++) { fib[i] = fib[i-1]+fib[i-2]; //递推得出每个月的兔子数量 } //输出每个月的兔子数量 for(i=0;i<NUM;i++) { printf("第%d月兔子总数:%d\n", i, fib[i]); } return 0; }
运行结果:
(2)银行存款问题:母亲为儿子小林的4年大学生活费准备了一笔存款,方式是整存零取,规定小林每月月底去取一个月的生活费(假设每月都取1000),现在假设银行的年利息为1.71%,计算母亲最少需要存入多少钱?
代码如下:
//start from the very beginning,and to create greatness//@author: Chuangwei Lin//@E-mail:979951191@qq.com//@brief: 银行取钱逆推#include <stdio.h>#define FETCH 1000//每月取出1000#define RATE 0.0171//年利息int main(){ double corpus[49];//数组用于存储4年(48个月)的本息和 int i; corpus[48]=(double)FETCH;//最后一个月取出1000元 for(i=47;i>0;i--) { corpus[i]=(corpus[i+1]+FETCH)/(1+RATE/12);//依次算出上一个月的本息和 } for(i=48;i>0;i--)//输出结果 { printf("%d月月末本利共计:%.2f\n",i,corpus[i]); } return 0;}
运行结果如下:
0 0
- 算法思想篇(2)————递推算法
- 算法洗脑系列(8篇)——第一篇 递推思想
- 算法洗脑系列(8篇)——第一篇 递推思想
- 算法洗脑系列(8篇)——第一篇 递推思想
- 算法洗脑系列(8篇)——第一篇 递推思想
- 递推算法思想
- 算法——递推算法
- 算法之递推思想
- 常用算法思想之:递推思想
- 八大算法思想(二)------------------递推算法
- 常用算法思想--递推算法
- 算法入门——递推
- 五大算法思想—贪心算法
- java算法学习笔记--穷举算法/递推算法思想
- 基本算法思想之递推算法思想(C++语言描述)
- 数的计数——递推算法
- 基本算法——第九单元 递推
- 常见算法—累积累加、迭代、递推、递归
- Sicily 1036 Crypto Columns
- 网易yum源配置 CentOS6.5
- Linux GCC常用命令
- ListView和Adapter
- Android工程师面试宝典&面试实战试题详解01
- 算法思想篇(2)————递推算法
- mac利用QQ快速截图
- 一切关于兼容
- python网络编程(3)
- 如何在子类外调用父类的方法
- TopCoder SRM665 Div2 B
- 细说Cocos2d-JS——你必须知道的JavaScript
- 哈夫曼树详解
- 《算法导论》第18章 B树