Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
javascript解释此代码函数称之为self_Javascript_Call_Func - Fatal编程技术网

javascript解释此代码函数称之为self

javascript解释此代码函数称之为self,javascript,call,func,Javascript,Call,Func,请有人给我解释一下 函数func(x,n){ 如果(n==1){ 返回x; }否则{ 返回x*func(x,n-1); } } console.log(func(2,4));//16该函数执行幂运算。所以func(x,n)正在计算xn 它使用递归,基于以下原则: 当n为1时,则xn=x1=x 当n>1时,则xn=x.xn-1 对于第二条语句,我们可以使用参数x和n-1的函数 对于具体的例子,func(2,4),情况如下: x=2,n=4,因此我们进入else块并计算: 2 * func(2

请有人给我解释一下

函数func(x,n){ 如果(n==1){ 返回x; }否则{ 返回x*func(x,n-1); } }
console.log(func(2,4));//16该函数执行幂运算。所以
func(x,n)
正在计算xn

它使用递归,基于以下原则:

  • 当n为1时,则xn=x1=x
  • 当n>1时,则xn=x.xn-1
对于第二条语句,我们可以使用参数x和n-1的函数

对于具体的例子,
func(2,4)
,情况如下:

x=2,n=4,因此我们进入
else
块并计算:

2 * func(2, 3)
对于
func
的这个嵌套调用,我们有x=2,n=3,我们再次进入
else
块:

2 * func(2, 2)
我们还有一个嵌套调用,其计算结果为:

2 * func(2, 1)
2
…最后一个嵌套调用进入
if
块并计算为:

2 * func(2, 1)
2
现在我们需要回溯,因为每个嵌套函数调用都会将结果返回给调用方:

  • func(2,1)
    返回2,将
    2*func(2,1)
    变为4
  • func(2,2)
    返回4,这将
    2*func(2,2)
    变为8
  • func(2,3)
    返回8,这将
    2*func(2,4)
    变为16
  • 这16是你在输出中得到的

这是一个递归幂函数。它的作用如下:

  • 2^4=?
  • 2*2^3=?
  • 2*2*2^2=?
  • 2*2*2*(2^1)=?
    //此时我们得到
    n==1
    ,这里的结果就是
    x
    ,在您的示例中是
    2
    。从这一点上,我们可以开始“后退”
  • 2*2*(2*2)=?
  • 2*(2*4)=?
  • (2*8)=?
  • 16=?
    //16只是16,我们完成了。 您可以阅读一些关于递归的内容,以便更好地了解正在发生的事情

  • 如果您想了解递归是如何工作的,那么我将用这个基本流程图向您解释。

    我还编辑了你的JS代码,因此它将为你提供澄清

    函数func(x,n){ 如果(n==1){ 返回x; }否则{ 设函数_返回=func(x,n-1); log(x,“*”,函数返回,“=”,x*函数返回) 返回x*函数返回 } }
    console.log(func(2,4))检查这个,你有一个递归函数。谢谢大家的回答,谢谢KayD的回答事实上,第一次总是乘以1,我用加减法来看看在这种情况下会发生什么,在加号中,它是这样的2+1=3-2+3=5-2+5=7-2+7=9,这意味着答案是错误的,除非第一次该数字乘以1 nnd,然后再乘以2*1=2-2+2=4-2+4=6-2+6=8或2*1=2。2-2=0 . 2-0=2 . 2-2=0,即使对于÷