程序员的数学思维修炼

程序员的数学思维修炼

递归-自己调用自己

递归,又译为递回,在数学与计算机科学中,是指在函数的定义中又调用函数自身的方法。递归是一种奇妙的思考问题的方法,通过递归的这种思路,可简化问题的定义。递归一词常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。

德罗斯特效应

如图所示,为一张相框,在像框中又包括相同的一张较小的相框,在小图中又包含一张更小的相框,…,这样就形成了一幅递归形式的图形。
图片摘自https://zhuanlan.zhihu.com/p/28444089
上图所示的图形称为德罗斯特效应,是一种递归视觉形式,是指一张图片的某个部分与整张图片相同,如此产生无限循环。

什么是递归

在数学和计算机科学中,递归指由一种(或多种)简单的基本情况定义的一类对象或方法,并规定其他所有情况都能被还原为其基本情况。
例如,我们人类的发展繁衍中,人之间的辈分就是一种递归,在这个递归中首先定义一个人基本情况,接着定义递归,具体情况如下:

1.A的父母是A的祖先(这是基本情况)。
2.A祖先的双亲同样是A的祖先(递归步骤)。
对于递归,这是一种便于理解的心里模式,认为递归对对象的定义是按照“先前定义的”同类对象来定义的。

递归的应用

JavaScript用递归如何计算求1-100的和了?

分析:

假设递归函数已经写好,既sum(100),就是求1-100的和。寻找递推关系: 就是 n 与 n-1 ,或 n-2 之间的关系:

sum(n) == sum(n-1) + n

var resulst = sum(100);
var resulst = sum(99) + 100;

1、将递归结构转换成递归体

function sum(n){
return sum(n-1) + n;
}
这时候我们差一个重要的步骤,也就是临界值,来阻止程序死循环

2、将临界条件加入到递归中
求100 转换为 求99
求99 转换为 求98
求98 转换为 求97

求2 转换为 求1
求1 转换为 求1
即 sum(1) = 1

3、递归函数

function sum(n){
if(n==1) return 1;
return sum(n-1) + n;
}
var amount = sum(100);
console.log(amount);

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值