关于递归的

OpenOffice_org 2005-04-23 11:50:09
fun(int x)


{
if(x/2>0) fun(x/2);


   printf("%d ",x);


}


  main()


  { fun(6); }

这种函数的递归调用我看不懂,到底输出的X值为多秒?

请指教,谢谢
...全文
146 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
llf_hust 2005-04-24
  • 打赏
  • 举报
回复
fun(int x)


{
if(x/2>0) fun(x/2);


   printf("%d ",x);


}


  main()


  { fun(6); }

这种函数的递归调用我看不懂,到底输出的X值为多秒?


1. 6/2 ====>3 >0
fun(3/2)====>1>0
fun(1/2)====> 不大于0
输出 1 3 6
blackmouth 2005-04-24
  • 打赏
  • 举报
回复
fun(int x)


{
if(x/2>0) fun(x/2);


   printf("%d ",x);


}


  main()


  { fun(6); }
整数除法中1/2=0,3/2=1
所以x的值在传递过程中为6 3 1
当x=1时x/2>0不成立,结束递归,打印x
nanr_1122 2005-04-24
  • 打赏
  • 举报
回复
我这有问题 请教~~~~~`
很简单的两个函数:
long ract(int n) // 阶乘问题( n!)
{
if(n<0)
{printf("异常");
exit(-1);
}
else if(n<=1)
return(1);
else
return( n*ract(n-1) );// 调用自己;
}//结束;

经典 hanoi 问题;
void hanoi ( int n, char a, char b ,char c)
{ if(n>0)
{
hanoi(n-1,a,c,b);
printf("\n move disc %d from pile %c to %c",n,a,b);
hanoi (n-1,c,b,a);
}
}// end

我想请教的是 拿到问题时, 我想从 问题的 n 用 n-1 来设计过程不是太难;
终结条件也可以考虑, 但是如果从整体的实现过程 来考虑 可就麻烦拉~
就是对函数的每一层保存,每一层调用, 从底部 的回传数据```````
就晕到这拉~~~ 我看到过曾经数据结构上说, 尽量不要模拟全部过程,只要将n-1问题想成肯定能完成就行,调用便行;
如上 要是 hanoi 问题 , 我就可以不想那么多, 因为不用从最后向上一层一层传数据,可是 第一个 阶乘 (n!) 问题, 我觉得我总 得 大体想想数据的回传过程, 要不老觉得不放心,~~~ 可这样老是觉得很困难~```
向各位请教 , 有没有什么好方法或经验, 可以较快较好的 解决, 有什么好的思路
望各位不吝赐教~~~~~~

nanr_1122 2005-04-24
  • 打赏
  • 举报
回复
aA
delhe 2005-04-24
  • 打赏
  • 举报
回复
第一题 输出结果为 1 3 6
第二题是 B没错,因为s加了c次,而循环后b == c+1 ,又有a == s, 所以s == a + c
OpenOffice_org 2005-04-23
  • 打赏
  • 举报
回复
(22)若有如下程序段,其中s、a、
0)
b、c均已定义为整型变量,且a、c均已赋值(c大于


  s=a;


  for(b=1;b<=c;b++) s=s+1;


  则与上述程序段功能等价的赋值语句


  A)s=a+b; B)s=a+c; C)s=s+c; D) s=b+c;

顺便请教一下,这道题应该选几?我选A为什么会错?题目给出的答案是B。为什么?

s的值应为s=a+(1+2+3...+c), 这样的话应该是答案A 呀,为什么会是B?

请指教,谢谢

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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