上节课涉及到函数的互相调用问题,函数互相调用就要注意直接或者间接的“死循环”。

其实当函数之间的相互调用,或者调用自身,在编程这门学问里还有一个说法,被称作是“递归”。

为什么我上面说“函数互相调用就要注意直接或者间接的‘死循环’”呢?

今天我们就来学习一下关于递归的相关内容。

什么是递归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);
  }
}

上面这个函数在运行时的结果:

arguments.callee_callee_arguments.callee

//2、在函数体内调用arguments.callee()。
function Sum(fromX,toY,step)
{
  if(fromX >= toY)
  {
    return toY;
  }
  else
  {
    return toY + arguments.callee(fromX,toY - step,step);
  }
}

callee_arguments.callee_arguments.callee

由此可以看到,函数体中调用arguments.callee与上面的行为是一致的。

//3、函数作用范围内指定一个指向该函数的变量名。
var MySum = function Sum(fromX,toY,step)
{
  if(fromX >= toY)
  {
    return toY;
  }
  else
  {
    return toY + MySum(fromX,toY - step,step);
  }
}

callee_arguments.callee_arguments.callee

好了,关于函数的递归就到此。

关注我,持续共同学习,一起踏上wps宏(JSA)的登山之路。

限 时 特 惠: 本站每日持续更新海量各大内部创业教程,一年会员只需98元,全站资源免费下载 点击查看详情
站 长 微 信: lzxmw777

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注