定义:程序调用自身的编程技巧称为递归。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
一般应用于不是清晰级别的结构名调用上。
构成递归需具备的条件:
1. 子问题须与原始问题为同样的事,且更为简单;
2. 不能无限制地调用本身,须有个出口,化简为非递归状况处理。
例1:斐波那契数列
//斐波那契数列,又称黄金分割数列,指的是这样一个数列:
//1、1、2、3、5、8、13、21、……
//求第i个数
<script>
function sl(var i){
if(i<=2){
return 1;
} else{
return sl(i-1)+sl(i-2);
if(i<=2){
return 1;
} else{
return sl(i-1)+sl(i-2);
}
}
}
</script>
例2:杨辉三角
// 1
// 1 1
// 1 2 1 //第n行第m个数:n=3,m=2时,数字为2;
// 1 3 3 1
// 1 4 6 4 1
// ......
// 1
// 1 1
// 1 2 1 //第n行第m个数:n=3,m=2时,数字为2;
// 1 3 3 1
// 1 4 6 4 1
// ......
//求第n行第m个数
<script>
function yhsj(n,m){
if(m>n){
return false;
} else {
if(m==1 || m==n){
return 1;
} else {
return yhsj(n-1,m) + yhsj(n-1,m-1);
}
}
}
<script>
function yhsj(n,m){
if(m>n){
return false;
} else {
if(m==1 || m==n){
return 1;
} else {
return yhsj(n-1,m) + yhsj(n-1,m-1);
}
}
}
</script>