c语言问题 为什么输出来是12345 而不是54321

2024-11-18 20:30:10
推荐回答(4个)
回答1:

因为当用5调用fun()函数时,会一直递归调用fun(a-1);直到a=1时,才会停止递归调用,并开始输出,

本级fun()函数输出后返回上级fun()函数,执行上级调用之亩羡后的代码(键耐槐即打印输出上级的a值),总体流程表现为从小到大打印输出:


a=5;fun(5) --> 稿友

在fun(5)中执行if(5>1)fun(4) --> 

在fun(4)中执行if(4>1)fun(3) --> 

在fun(3)中执行if(3>1)fun(2) --> 

在fun(2)中执行if(2>1)fun(1) --> 

在fun(1)中执行printf("1 "), 返回fun(2)--> 

在fun(2)中继续执行if后的printf("2 "), 返回fun(3) --> 

在fun(3)中继续执行if后的printf("3 "), 返回fun(4)-->

在fun(4)中继续执行if后的printf("4 "), 返回fun(5)--> 

在fun(5)中继续执行if后的printf("5 "), 返回main();


如果希望从大到小输出,建议把fun()函数的输出命令放到递归调用之前,即先输出,再减值递归调用,如下:

void fun(int a)
{
    printf("%d ",a);
    if(a>1)fun(a-1);
}

回答2:

这是个递归嵌套的程序,会一直递归调用fun函数,直到fun(2)这次调用的时候输出1为止。望采纳

回答3:

递归程序。你将第6行放到if前面,就可以得到54321了

回答4:

你把第6句写到第4句前面去看看