1、递推法
递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西。
(1)顺推法
是指从已知条件出发,逐步推算出要解决问题的方法。例如:斐波拉契数列就可以通过顺推法不断递推算出新的数据。
1 /****************************************************************************************************** 2 * 3 * 顺推法 4 * 如果一对兔子每月能生1对小兔子,而每对小兔子在它出生的第三个月里,又开始生1对小兔子, 5 * 假设在不发生死亡的情况下,由1对初生的兔子开始,1年后能繁殖出多少对兔子? 6 * 7 *******************************************************************************************************/ 8 9 #include "stdio.h" 10 11 12 void main() 13 { 14 int i; 15 int NumMonth[13] = { 0, 1, 1 }; 16 17 18 for (i = 2; i < 13; i++) 19 NumMonth[i] = NumMonth[i - 1] + NumMonth[i - 2]; 20 21 for (i = 1; i < 13; i++) 22 printf("第%d个月兔子总数:%d\n", NumMonth[i]); 23 24 while (1); 25 26 27 }
(2)逆推法
是从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。
1 /****************************************************************************************************** 2 * 3 * 逆推法: 4 * 父亲准备为小龙的4年大学生活一次性在银行存储一笔钱,使用整存整取得方法,控制小龙每个月的月底只能提取 5 * 1000块钱准备下个月使用,假设银行一年整存零取的年利息为1.71%,请编程计算出父亲至少需要一次性存入多少钱 6 * 才够小龙4年大学生活费 7 * 8 *******************************************************************************************************/ 9 10 11 #include "stdio.h" 12 13 void main() 14 { 15 int i = 0; 16 float MoneyMonth[49] ; 17 18 MoneyMonth[48] = 1000; 19 20 for (i = 47; i > 0; i--) 21 MoneyMonth[i] = (MoneyMonth[i + 1]+1000)/(1+0.00171); 22 23 printf("至少应该应该存%.3f", MoneyMonth[1]); 24 25 while (1); 26 27 }
时间: 2024-10-11 10:55:27