今晚的一道笔试题目,求解答

ma747959177 2011-05-11 09:19:55
有函数如下

void test(int i)
{
if (i>1)
{
test(i/2);
test(i/2);
}
printf("*");
}

执行test(5); 则打印了几个*??

刚实验了一下 是7个 我选的3个 不懂 求解!
...全文
70 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
void_Function 2011-05-11
  • 打赏
  • 举报
回复
7个

test(5)
test(2)
{ test(1); 1个*
test(1); 1个*
printf('*'); 1个*
}
test(2)
{ test(1); 1个*
test(1); 1个*
printf('*'); 1个*
}
printf('*'); 1个*
}
jernymy 2011-05-11
  • 打赏
  • 举报
回复

test(5)
=test(2) + test(2) + "*"
=(test(1)+test(1)+"*") + (test(1)+test(1)+"*") + "*"
=("*" + "*" +"*") + ("*" + "*" +"*") + "*"
就想叫yoko 2011-05-11
  • 打赏
  • 举报
回复
语句按顺序执行
5/2=2
2/2=1
1/2=1
知道这几点仔细点就行了
ma747959177 2011-05-11
  • 打赏
  • 举报
回复
怎么调试的时候 i=5时第二个test(i/2)没执行啊
怎么回事
ljt3969636 2011-05-11
  • 打赏
  • 举报
回复
对于第一层:
void test(int i)
{
if (i>1)
{
test(i/2);//这里三次*1
test(i/2);//这里三次*2
}
printf("*");//这里一次
}
//第一层到此结束,以下分解第一层的*1,*2同理
*1处怎么三次?test(i/2=为2);
{
test(2/2);//这里1次**1
test(2/2);//这里1次**2
printf("*");//这里一次
}

**1怎么1次?test(2/2为1);
{
test(1/2);//这里0次***1//因为下一层i为0,没print呢就返回了。
test(1/2);//这里0次***2
printf("*");//这里1次
}


*2以及他的深层**2同理~~~
ljt3969636 2011-05-11
  • 打赏
  • 举报
回复
对于第一层:
void test(int i)
{
if (i>1)
{
test(i/2);//这里三次*1
test(i/2);//这里三次*2
}
printf("*");//这里一次
}

*1处怎么三次?test(i/2=为2);
{
test(2/2);//这里1次**1
test(2/2);//这里1次**2
printf("*");//这里一次
}

**1怎么1次?test(2/2为1);
{
test(1/2);//这里0次***1//因为下一层i为0,没print呢就返回了。
test(1/2);//这里0次***2
printf("*");//这里1次
}


*2以及他的深层**2同理~~~

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧