两种递推算法
- 顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。
- 逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
顺推法
经典的兔子问题可以用顺推法解决:
#include <stdio.h>
#define NUM 13
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;
}
逆推法
小龙的父亲供小龙4年(48个月)大学读书,采用整存零取的方式,一次性预存一笔钱于银行,小龙每个月月初取1000元。假设银行年利率为0.0171,若要求在第48个月小龙大学毕业时连本带息要取1000元,则应该一次性预存多少钱?
设每个月月末存款为clip_image002[1],其中clip_image011表示月份,n=0时表示第一月的月初,数学模型为:
double monthRate = 0.0171 / 12;
int months = 49;
int FETCH = 1000;
double[] money = new double[months];
money[48] = FETCH;
for (int i = months-1; i > 0; i--)
{
money[i - 1] = money[i] / (1 + monthRate) + FETCH;
}
for (int i = months-1; i >= 0; i--)
{
Console.WriteLine("第"+i+"个月份的月末存款为: " + money[i] );
}