目录
算法思路
递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。
一顺推法:是指从己知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。
一逆推法:是从己知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
1.顺推实例
月份 | 大兔子数量 | 1个月的兔子数量 | 2个月的兔子数量 | 兔子的总量 |
初始状态 | 0 | 1 | 0 | 1 |
1月 | 0 | 0 | 1 | 1 |
2月 | 1 | 1 | 0 | 2 |
3月 | 1 | 1 | 1 | 3 |
4月 | 2 | 2 | 1 | 5 |
5月 | 3 | 3 | 2 | 8 |
6月 | 5 | 5 | 3 | 13 |
7月 | 8 | 8 | 5 | 21 |
8月 | 13 | 13 | 8 | 34 |
9月 | 21 | 21 | 13 | 55 |
10月 | 34 | 34 | 21 | 89 |
11月 | 55 | 55 | 34 | 144 |
12月 | 89 | 89 | 55 | 233 |
兔子数列——斐波那契数列
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define NUH 13
//兔子数列:斐波那契数列
int main()
{
int i;
int fib[NUH] = { 1,1 };
for (i = 2; i < NUH; i++);
{
fib[i] = fib[i - i] + fib[i - 2];
}
for (i = 0; i < NUH; i++)
{
printf("%d月兔子总数;%d\n", i, fib[i]);
}
getchar();
return 0;
}
2逆推实例
若在第48月小龙大学毕业时连本带息要取1000元,则要先求出第47个月时银行存款的钱数
第47月月末存款=1000/(1+0.0171/12):
第46月月末存款=(第47月月末存款+1000)/(1+0.0171/12)
依次类推,可以求出第45月、第44月…..的月末存款的数值
第45月月末存款=(第46月月末存款+1000)/(1+0.0171/12)
第44月月末存款=(第45月月末存款+1000)/(1+0.0171/12)
第2月月末存款=(第3月月末存款+1000)/(1+0.0171/12)
第1月月末存款=(第2月月末存款+1000)/(1+0.0171/12)
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#define FETCH 1000
#define RATE 0.0171
int main()
{
double corpus[49];
int i;
corpus[48] = (double)FETCH;
for (i = 47; i > 0; i--)
{
corpus[i] = (corpus[i + 1] + FETCH) / (1 + RATE / 12);
}
for (i = 48; i > 0; i--)
{
printf("第%2d月末本利合计:%.2f\n", i, corpus[i]);
}
getchar();
return 0;
}