C语言刷题系列——6.(递归)实现顺序输出整数

简介: C语言刷题系列——6.(递归)实现顺序输出整数

❄️一) 题目要求


☃️1.函数接口定义:

void printdigits( int n );

函数printdigits应将n的每一位数字从高位到低位顺序打印出来,每位数字占一行。


☃️2.裁判测试程序样例:

#include <stdio.h>
void printdigits( int n );
int main()
{
    int n;
    scanf("%d", &n);
    printdigits(n);
    return 0;
}
/* 你的代码将被嵌在这里 */


❄️二) 非递归 解法


☃️step1.统计位数

☃️step2.循环,打印每一位

☃️step3.实现

void printdigits(int n)
{
    int i = n,c=n;
    int count = 1;
    while (i /= 10)
    {
        count++;
    }//统计位数
    for(int j = count;j>=1;j--)
    {
       c=n;
       for(i = 0;i<j-1;i++)
       {
          c /= 10;
       }
       c%=10;
       printf("%d\n",c);
    }
}


❄️三) 递归 解法


☃️step1.分析

输入一个数(比如12345),想要打印出每一位,可以拆解成:

先打印1,再用函数printdigits()对2345执行相同的操作

打印2,再用函数printdigits()对345执行相同的操作

打印3,再用函数printdigits()对45执行相同的操作

打印4,再用函数printdigits()直接打印最后一位5即可


☃️step2.图解流程

把step1倒过来看,

当递归到最后n<10的时候,直接打印出即可

由于要顺序打印(从高位向低位依次输出每一位数)

printdigits()括号里放n/10,使得每递归一次(从低位)少一位


☃️step3.实现

void printdigits(int n) 
{
    if (n < 10)
        printf("%d\n", n);
    else
    {
        printdigits(n / 10);
        printf("%d\n", n % 10);
    }
}


相关文章
|
4月前
|
存储 C语言
【C语言】基础刷题训练4(含全面分析和代码改进示例)
【C语言】基础刷题训练4(含全面分析和代码改进示例)
|
2月前
|
机器学习/深度学习 C语言
【c语言】一篇文章搞懂函数递归
本文详细介绍了函数递归的概念、思想及其限制条件,并通过求阶乘、打印整数每一位和求斐波那契数等实例,展示了递归的应用。递归的核心在于将大问题分解为小问题,但需注意递归可能导致效率低下和栈溢出的问题。文章最后总结了递归的优缺点,提醒读者在实际编程中合理使用递归。
77 7
|
2月前
|
C语言
c语言回顾-函数递归(上)
c语言回顾-函数递归(上)
49 2
|
2月前
|
机器学习/深度学习 编译器 C语言
C语言刷题(中)(保姆式详解)
C语言刷题(中)(保姆式详解)
19 0
|
2月前
|
C语言
c语言回顾-函数递归(下)
c语言回顾-函数递归(下)
48 0
|
4月前
|
机器学习/深度学习 C语言
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
要保持最小的步数,每一次汉诺塔问题(无论是最初还是递归过程中的),如果此时初始柱盘子数为偶数,我们第一步是把最上面的盘子移动到中转柱,如果为奇数,我们第一步则是将其移动到目标柱。
109 0
【C语言篇】递归详细介绍(基础概念习题及汉诺塔等进阶问题)
|
4月前
|
算法 编译器 C语言
【C语言】递归
【C语言】递归
27 0
|
4月前
|
C语言
【C语言刷题训练】——第7节(含代码与分析思路)
【C语言刷题训练】——第7节(含代码与分析思路)
|
4月前
|
测试技术 C语言 C++
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
【C语言刷题训练——6】鹏哥C语言刷题训练营笔记,含代码讲解改进
|
4月前
|
存储 C语言
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)
【C语言】鹏哥C语言刷题训练营——第5节内容笔记(含代码全面分析和改进,讲解)