C语言递归的运行顺序

C语言递归的运行顺序,第1张

 

今天分享一下C语言课会讲到了一道非常经典的递归题目!

代码如下:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
#include 

void Print(int n){  if (n > 9)    Print(n / 10);  printf("%d ", n % 10);}

int main(){  int num = 0;  scanf("%d", &num);  Print(num);  return 0;}

结果如下

C语言递归的运行顺序,c390aff6-2dbb-11ed-ba43-dac502259ad0.png,第2张

运行顺序

谈到递归的时候,最重要的就是要弄明白它究竟是怎么运行的

一般C语言上课时讲的方法非常直观的表示了它的运算顺序

这里我用粘贴代码块的方式来展示

刚开始执行的是scanf输入,这里不再赘述

  •  
  •  
  •  
  •  
  •  
  •  
void Print(int n){  if (n > 9)    Print(n / 10);  printf("%d ", n % 10);}

这一块是我们递归的主体

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
void Print(int n){  if (n > 9)    Print(3578 / 10);        if (n > 9)      Print(357 / 10);      printf("%d ", 357 % 10);//7          if (n > 9)        Print(35 / 10);        printf("%d ", 35 % 10);//5            if (n > 9)//这时候值为3,已经不满足条件            Print(3 / 10);//该语句不执行          printf("%d ", 3 % 10);//3  printf("%d ", 3578 % 10);//8}

看起来可能有点乱,在这基础上加上一些箭头就会清晰了

C语言递归的运行顺序,c3a15ba8-2dbb-11ed-ba43-dac502259ad0.png,第3张

起初我的想法是,在进行if判断之后,会先执行下面的printf,即先打印最后一位数8,再向前打印

实际上,if语句后的Print函数的嵌套调用是在下一行printf之前的、

也就是说它需要像图中这样完全调用完,直到if判断为假后,才会从后往前运行printf语句

这才有了最开始我贴的结果

C语言递归的运行顺序,c3bf061c-2dbb-11ed-ba43-dac502259ad0.png,第4张

程序依次打印了每一位的数字

如果这篇博客对你有帮助,还请点赞收藏支持一下!万分感谢!
 

  审核编辑:汤梓红

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2999996.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-09-26
下一篇 2022-09-26

发表评论

登录后才能评论

评论列表(0条)

保存