重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
在y!=0的情况下,fun会调用自己,要等y=0后,一层层往上。就到到fun(1)的时候再会执行printf("%d",d);putchar('\n');然后会执行fun(y*2+d)后面的,printf("%d",d);putchar('\n'),然后再往上,,,直到你最初的fun(n)后面的printf("%d",d);putchar('\n')。
巩留网站建设公司创新互联公司,巩留网站设计制作,有大型网站制作公司丰富经验。已为巩留上千提供企业网站建设服务。企业网站搭建\成都外贸网站建设要多少钱,请找那个售后服务好的巩留做网站的公司定做!
你可以在printf("%d",d),后面加一个printf("n
=
%d\n",
n);
可以看到如下结果
8
n
=
1
1
n
=
2
n
=
4
n
=
8
是第一个执行完再执行第二个
递归调用可以这样理解,就是想像有很多个函数的复制体,每次调用自己都是在调用一个复制体,一直到满足
if(start=end)
return;
然后再一层一层返回。
楼主的程序有两处错误,给你修正了一下:
局部两边x没有引用,给你删掉
main函数没有定义类型,加void
#include stdio.h
void fun(int n)
{
int d,y;//x给你删掉了
d=n%2;
y=n/2;
if(y!=0)
{
fun(y);
}
printf("%d",d);
//putchar('\n');这个没用我给你注释了
}
void main()
{
int n;
printf("enter a number\n");
scanf("%d",n);
if(n0)
printf("Input data error\n");
else
fun(n);
putchar('\n')//最后才调用这句代码
}
下面给你分析一下:
fun()函数是一个递归函数,什么意思呢?意思就是它会调用本身,每次函数都会先执行代码d=n%2;y=n/2;然后在判断n是否大于0,如果n大于0,函数继续回调,如果n=0,函数就结束了回调,整个程序也就完成了。
至于你说的执行完了这句还会不会执行后面的printf("%d",d);这是肯定的,因为要输出啊,给你看看运行结果