递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。
顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波拉契数列就可以通过顺推法不断递推算出新的数据。
逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件。
斐波那契数列的代码实现
#include <stdio.h> #define NUM 13 int main(void){ int i; int 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]); } getch(); return 0; }
逆推算法。如果一个大学生要在四年(48个月)中每个月都取出一千块,存款的年利率是1.71%,则最开始要存入银行多少钱才能满足条件。
#include <stdio.h> #define FETCH 1000 #define RATE 0.0171 int main(void){ 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("第%d个月本利合计共%.2f\n",i,corpus[i]); } getch(); return 0; }