递推算法

编程的灵魂:数据结构 + 算法
什么是程序:数据结构 + 算法 + 程序设计语言
数据结构是算法实现的基础,算法总是要依赖数据结构来实现的。

递推算法:

算法思路:

递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西

  • 顺推法:
    从已知条件出发,逐步推算出要解决问题的方法。
    例如:斐波拉数列
  • 逆推法:
    从已知结果出发,用迭代的表达式逐步推算出问题开始的条件,即顺推法法逆过程。
顺推实例

斐波拉数列:兔子生孩子问题
第三个月是前两个月之和
在这里插入图片描述

function obey(){
   // 定义一个数组来接受兔子每个月的总和
    // 初始化前俩个月的兔子数量
    var fib = [1,1] ;

    // 接受用户来控制输出的那个月的兔子总数
    var month = Number(prompt('请输入一个数来代表月份:'));

    // 判断用户是否输入是否正常
    if(month >=  0){
        // 利用规律计算总数
        for(var i = 2; i <= month; i++){
            fib[i] = fib[i-1] + fib[i-2];
        }
        console.log(`${month}月兔子总数为${fib[month]}`);
    }else{
        console.log('求求你,做个人!');
    }
}
逆推实例

若在第48月小明大学毕业时连本带息要取1000元,则要先求出第47个月时银行
存款的钱数
第47月月末存款 = 1000/(1+0.0171/12);
第46月月末存款 = (第47天月月末存款 + 1000)/(1+0.0171/12);
第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);

function athwart(){
    //定义两个常量便于以后更改,48个月本带息要的钱和利息率
    const FETCH = 1000;
    const PATE = 0.0171;

    //定义一个数组和循环变量
    var corpus=[],
        i = 0;

    //初始化第48个月
    corpus[48] = FETCH;
    //计算
    for(i = 47; i > 0; i--){
        corpus[i] = (corpus[i+1] + FETCH) / (1 + PATE / 12);
    }
    //打印
    for(i = 48; i > 0; i--){
        console.log(`第${i}个月末本利合计为${corpus[i]}`);
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值