编程的灵魂:数据结构 + 算法
什么是程序:数据结构 + 算法 + 程序设计语言
数据结构是算法实现的基础,算法总是要依赖数据结构来实现的。
递推算法:
算法思路:
递推算法使用“步步为营”的方法,不断利用已有的信息推导出新的东西
- 顺推法:
从已知条件出发,逐步推算出要解决问题的方法。
例如:斐波拉数列 - 逆推法:
从已知结果出发,用迭代的表达式逐步推算出问题开始的条件,即顺推法法逆过程。
顺推实例
斐波拉数列:兔子生孩子问题
第三个月是前两个月之和
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]}`);
}
}