接受一个整型值,按照顺序打印他的每一位(函数,递归方法)

举报
念君思宁 发表于 2023/02/19 20:25:10 2023/02/19
【摘要】 接受一个整型值,按照顺序打印他的每一位(函数,递归方法)

接受一个整型值,按照顺序打印他的每一位

列如;输入1234(一千二百三十四)

           输出1  2  3   4

在这里,对于1234(一千二百三十四),我们可以分别求个位,十位,百位,千位,然后分别输出就行,这个是对于刚入门C语言学习不久的小白而言的代码做法,但是如何用函数与递归的方法来进行写这个代码,却是有待思考!

众所周知:对于新手小白而言,可以这样来求每一个个十百千位数:

千位q= n / 1000,     百位b= n / 100 % 10,       十位s= n / 10 % 10,        个位g=n % 10

然后可以用:printf("%d %d %d %d\n",g,s,b,q);依次来输出;

对于某些熟练的人

也可以用:printf("%d %d %d %d ", n / 1000, n / 100 % 10, n / 10 % 10, n % 10);的方法来输出

我们尤其需要注意取余,及除法的应用........

因此笔者的代码为:

//接受一个(无符号)整型值,按照顺序打印他的每一位
//1234(一千两百三十四)
//常规做法
#include <stdio.h>
int main()
{
	int n = 0;
	printf("请输入一个四位数字 :\n");
	scanf_s("%d", &n);
	printf("%d %d %d %d", n % 10, n / 10 % 10, n / 100 % 10, n / 1000);   //4 3 2 1
	printf("\n");
	printf("%d %d %d %d", n / 1000, n / 100 % 10, n / 10 % 10, n % 10);   //1 2 3 4
	return 0;
}

在这里,笔者打印了俩个printf("");

至于结果:

 这一种代码,看似简单,但却将数字简单的限定在了四位数,其他的位数数字都不能正确打印(不足四位数,有补0现象)

 对于多于四位数字,则出现了......具体内容不方便多说,请看运转后的结果:

 在这里,不管输入多少数字,都只能求四次取余或者除法,没有多余的运算。

但是对于一个成百上千的未知数,我们是否也是这样求呢??

我想:答案是否定的,因为对于一个很大的数字,我们一方面不知道具体有多少数字,另一方面,还不知道得设出多少未知数,写出多少个取余或者除法!

在这里,笔者认为:函数+递归,是一个很好的去处........

下面来欣赏一下,笔者用刚刚所学的函数+递归所写出的代码,若有不足之处,请各位多多坦待。

具体代码为:

//接受一个(无符号)整型值,按照顺序打印他的每一位
//函数写法
#include <stdio.h>
void dayin(int n)
{
	if (n > 9)
	{
		dayin(n/10);
	}
	printf("%d  ",n%10);
}
int main()
{
	int n = 0;
	printf("请输入任意数字:\n");
	scanf_s("%d", &n);
	dayin(n);
 
	return 0;
}

1.在函数的定义部分用了void 函数,不用返回值;

2.函数的命名,简单自己能看懂即可

3.在这个函数的定义里面,有俩个最重要的代码,if (n > 9)  表示递归进入的条件;dayin(n/10)  表示递归跳出的条件;

笔者之拙见,代码已经奉上,解析,我想应该都能看懂;至于其他话,笔者便不再多言;

下面给出:

递归的俩个必要条件

1.存在限制条件,当满足这个限制条件的时候,递归便不再继续

2。每次递归的调用之后都越来越接近这个限制条件

但是,俩个仅仅是必要条件,而不是充分条件,

至于反列,请看笔者下面代码:

#include <stdio.h>
void test(int n)
{
	if (n < 2000)
	{
		test(n + 100);
	}
}
int main()
{
	test(100);
	return 0;
}

在这里面,对于递归的俩个条件都完美诠释,

并且if语句中递归的进入条件,test语句中递归的跳出条件都符合递归的俩个必要条件

但是,代码最后的运转结果却是大大出乎意料:

 代码没有任何毛病,经得起考验,与推敲;

但是为什么会是这样的运转结果:笔者所知道的只有:栈溢出

至于其他具体原因,请原谅笔者技艺不熟!

一道亮光打开了笔者心扉

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。