C语言习题:递归实现依次打印出数字,你学会了吗?

Posted 一起学编程

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言习题:递归实现依次打印出数字,你学会了吗?相关的知识,希望对你有一定的参考价值。

今天来分析一道非常经典的递归题目:实现依次打印出数字中的每一位

代码如下:

#include <stdio.h>

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;

结果如下:

运行顺序

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

下面的方法非常直观的表示了它的运算顺序

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

刚开始执行的是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

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

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

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

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

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

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

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

-----------------------------------

写在最后:另外,对于准备学习C/C++编程的小伙伴,如果你想更好的提升你的编程核心能力(内功)不妨从现在开始!

C语言C++编程学习交流圈子,QQ群:946108597点击进入】微信公众号:C语言编程学习基地

整理分享(多年学习的源码、项目实战视频、项目笔记,基础入门教程)

以上是关于C语言习题:递归实现依次打印出数字,你学会了吗?的主要内容,如果未能解决你的问题,请参考以下文章

C语言:怎样把字符1变成数字1?

C语言习题如何在 C 中不使用任何分号打印从 1 到 N 的数字?

C语言习题打印一个数的每一位(递归)

C语言习题计算一个数的每位之和(递归实现)

C语言详解:函数递归专题

c语言:实现对于给定的正整数N,依次打印出小于等于N的所有素数。两种方法及其优化