我很难描述这个程序是如何运行的。也许有人想帮我解释一下这个代码。这是我的代码:
#include<stdio.h>
int box(int a, int b, int t){
if(b==0)
{
return t;
}
else
{
return box(a, b-1, t*a);
}
}
int main(){
printf("%d", box(3,4,2));
return 0;
}
这个程序输出是162。如果t x a应该是6 x 6 x 6,它就不会打印t x a,我很困惑为什么输出162。
在第一次迭代中,a=3,b=4,t=2
因此,t*a=6
在第二次迭代中,a=3,b=3,t=6
因此,t*a=18
在第三次迭代中,a=3,b=2,t=18
因此,t*a=54
在第四次迭代中,a=3,b=1,t=54
因此,t*a=162
在第五次迭代中,a=3,b=0,t=162
当b==0时,它将返回162
我将与您一起浏览该程序。
您用a=3
b=4
t=2
呼叫box()
。现在它问b是否为0,这是错误的,所以它转到else{}
,那么你用a=3
、b=3
、t=2*3
或t=6
调用box()
。第三次称之为a=3
b=2
t=2*3*3
或t=18
。然后第四次a=3
b=1
t=2*3*3*3
或t=54
,b还不是0,所以它再次调用,最后转到a=3
b=0
t=2*3*3*3*3
或t=162
并返回162,所以它所做的只是从t开始,乘以a,b倍,所以t*a^b
基本上是你真正在做的,而不是(t*a)^3
此递归程序将运行-直到b=0
功能输入box(3,4,2)
box
函数结构int box(int a, int b, int t)
,取三个整数参数,返回int
值。
递归地将函数控制返回到int box(int a, int b-1, int t*a)
,直到b=0
b=4调用int box (3, 3, 6)
b=3调用int box (3, 2, 18)
b=2调用int box (3, 1, 54)
现在注意到b变为1或int box( )
递归调用使b=1
b=1调用int box (3, 0, 54*3)
并且反过来被终止