javascript解释此代码函数称之为self
请有人给我解释一下 函数func(x,n){ 如果(n==1){ 返回x; }否则{ 返回x*func(x,n-1); } }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
console.log(func(2,4));//16该函数执行幂运算。所以
func(x,n)
正在计算xn
它使用递归,基于以下原则:
- 当n为1时,则xn=x1=x
- 当n>1时,则xn=x.xn-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
现在我们需要回溯,因为每个嵌套函数调用都会将结果返回给调用方:
- 为
返回2,将func(2,1)
变为42*func(2,1)
- 为
返回4,这将func(2,2)
变为82*func(2,2)
- 为
返回8,这将func(2,3)
变为162*func(2,4)
- 这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,即使对于÷