我该如何阅读这个递归c编程

  • 本文关键字:递归 编程 何阅读 c
  • 更新时间 :
  • 英文 :


我很难描述这个程序是如何运行的。也许有人想帮我解释一下这个代码。这是我的代码:

#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=3b=4t=2呼叫box()。现在它问b是否为0,这是错误的,所以它转到else{},那么你用a=3b=3t=2*3t=6调用box()。第三次称之为a=3b=2t=2*3*3t=18。然后第四次a=3b=1t=2*3*3*3t=54,b还不是0,所以它再次调用,最后转到a=3b=0t=2*3*3*3*3t=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)

并且反过来被终止

最新更新