递归,循环,迭代,枚举(个人所见,请指教)
〓递归(recursion)在数学与计算机科学中,是指在函数的定义中使用函数自身的方法。递归一词还较常用于描述以自相似方法重复事物的过程。例如,当两面镜子相互之间近似平行时,镜中嵌套的图像是以无限递归的形式出现的。
可以理解为:指的是一个函数不断调用自身的行为。
语言例子(Language examples):从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢? “从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢? “从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……””
编程例子(Programming examples):各语言编写的一个递归例子,函数或过程会无限调用自身。理论上说它永远不会结束,实际上因为内存限制它会陷入死循环并崩溃,这种递归叫做无穷递归
递归函数(Recursion function):是在一个函数通过名字调用自身的情况下构成的,
js例子:
function man(num){
if(num<=1){
return 1;
}else{
return num*man(num-1); //调用了自身
}
}
var woman = man; //变量woman引用函数man
man = null;
alert(woman(6)); //报错,man is not a function
将man函数保存在变量woman中,然后将man变量设置为null,结果指向原始函数的引用就剩下一个,在调用woman()时,由于必须执行man(),而man已经不再是函数,所以导致出现了错误,
在这种情况下,使用arguments.callee可以解决问题arguments.callee是一个指向正在执行的函数的指针,因此可以用它来实现对函数的递归调用,
例如:
function man(num){
if (num <= 1) {
return 1;
}else {
return num * arguments.callee(num - 1); //通过使用arguments.callee代替函数名,可以确保无论怎么样调用函数都不会出问题
}
}
var woman = man; //变量woman引用函数man
man = null;
alert(woman(6)); // 720
〓循环(loop):指的是在满足条件的情况下,重复执行同一段代码。一般语言都会有三种类型的循环语句:for语句、while语句和do While语句。
可以理解为:循环就是迭代(重复)一些命令的代码块, 如果循环控制条件不满足的话, 就结束循环.
语言例子(Language examples):将一段音乐或声音反覆播放数次(无限次/无穷循环)。地球自转一次是一天,地球公转一次是一年。而人的年龄由于地球公转,相应在每次循环时,在原来的基础上增加了一岁。
JavaScript for循环例子:
/*
for语句是一种前测试循环语句,但它具有在执行循环之前初始化变量和定义循环后要执行的代码的能力,for语句语法:
语法:for (initialization; expression; post-loop-expression) statement
Small details:
1.for循环的变量初始化表达式中,也可以不使用var关键字。该变量的初始化可以在外部执行。(var i; for(i=0;i<count;i++){ do something})
1
2.使用while循环做不到的,使用for循环同样也做不到。也就是说for循环只是把循环有关的代码集中在了一个位置
1
3.for语句中的初始化表达式,控制表达式和循环后表达式都是可选的,如果省略就会是一个无限循环。(for(;