算法学习笔记: 递推

两种递推算法

  • 顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。
  • 逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。

顺推法

经典的兔子问题可以用顺推法解决:

#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] );
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值