关于C语言递归实现1到n打印的程序流程及疑问咨询
关于递归打印1到n的C程序疑问解答
程序代码
// Prints numbers from 1 to n void printNos(unsigned int n) { if (n > 0) { printNos(n - 1); printf("%d ", n); } return; } // Driver code int main() { int n = 10; printNos(n); getchar(); return 0; }
理解补充与疑问解答
你前面5步的理解完全正确,接下来补全整个执行流程,就能解释清楚你的疑问:
疑问1:printf语句是如何被执行的?
当递归调用到printNos(0)时,0>0条件不成立,函数直接执行return返回。此时程序会回到上一层调用的上下文——也就是printNos(1)中,刚执行完printNos(0)的位置,接下来就会执行printf("%d ", 1),打印出1;随后printNos(1)执行return,回到printNos(2)的上下文,执行printf("%d ", 2)打印2;以此类推,直到回溯到最开始的printNos(10),执行printf("%d ", 10)打印10。
简单来说,递归是先一层层"深入"到最底层(n=0),再从底层"回溯"返回,每回溯一层就执行一次对应的printf,最终实现1到10的顺序打印。
疑问2:主函数中的getchar()有什么作用?
getchar()的作用是让程序暂停运行,等待用户输入任意一个字符后再结束进程。如果没有这行代码,程序运行完printNos(10)后会直接退出,在部分编译运行环境中,控制台窗口会一闪而过,你可能来不及查看打印结果。加上这行代码后,程序会停在当前状态,直到你按下任意键才会关闭窗口。
内容的提问来源于stack exchange,提问作者mm25www
相关产品推荐
相关产品推荐

