上节课涉及到函数的互相调用问题,函数互相调用就要注意直接或者间接的“死循环”。
其实当函数之间的相互调用,或者调用自身,在编程这门学问里还有一个说法,被称作是“递归”。
为什么我上面说“函数互相调用就要注意直接或者间接的‘死循环’”呢?
今天我们就来学习一下关于递归的相关内容。
什么是递归recursive?
递归(recursive):一个函数直接或间接调用自身这种行为就被称作递归。而一个函数的算法是通过递归来实现的,那么这个函数被叫作递归函数。
递归从某种意义上说与循环是相似的:
1、执行相同的代码
2、必须有结束的条件。
***无结束条件的递归叫无限递归,也可以说是“死循环”,在目前的计算机硬件条件下是会引起“死机”***
在WPS宏脚本中如何实现递归?
例如以下函数,要实现递归当如何去做?
var helloWorld = function hello()
{
程序语句;
}
在WPS宏脚中我们可以通过以下几种形式去实现
1、在函数体内调用自身定义时的函数名称。
2、在函数体内调用arguments.callee()。
3、函数作用范围内指定一个指向该函数的变量名。
以上几种形式都是可以实现递归的。
例如:我们写一个简单的累加的函数的递归,分别以上面几种形式实现
//Sum(fromX,toY,step)函数是一个从fromX到toY,按照step为等差的求和公式。
//1、在函数体内调用自身定义时的函数名称。
function Sum(fromX,toY,step)
{
if(fromX >= toY)
{
return toY;
}
else
{
return toY + Sum(fromX,toY - step,step);
}
}
上面这个函数在运行时的结果:
//2、在函数体内调用arguments.callee()。
function Sum(fromX,toY,step)
{
if(fromX >= toY)
{
return toY;
}
else
{
return toY + arguments.callee(fromX,toY - step,step);
}
}
由此可以看到,函数体中调用arguments.callee与上面的行为是一致的。
//3、函数作用范围内指定一个指向该函数的变量名。
var MySum = function Sum(fromX,toY,step)
{
if(fromX >= toY)
{
return toY;
}
else
{
return toY + MySum(fromX,toY - step,step);
}
}
好了,关于函数的递归就到此。
关注我,持续共同学习,一起踏上wps宏(JSA)的登山之路。
限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。