C语言-递归法将一个数字转换成字符串

        

任务描述

本关任务:用递归法将一个整数 n (任意位数的整数)转换成字符串,并输出,各个字符之间用空格隔开。

例如,输入483,应输出字符串4 8 3

测试输入:123456789 预期输出:1 2 3 4 5 6 7 8 9

测试输入:-1314520 预期输出:- 1 3 1 4 5 2 0

  递归法是C语言中重点。我对递归理解就是将1个问题不断分解成小问题求解。比如说求10的阶乘,10!就可以分解为10*9!,10*9*8!...到10*9*8*...1!,1的阶乘就是1,再返回到2!,3!,4!...10!。如图解:

         

 

现在看一下这个题,将数字一个一个分开打印,第一个、第二个、第三个...,这样的问题就可以分解为第一个加剩下的数字,不断分解剩下的数字,直到最后一个数字。比如1234,就可以分解为打印1 (234),再分解成1 2 (34),1 2 3 (4)。注意是先打印前面的数字,后打印后面数字。假如我们想先打印后面数字,这是比较容易的%10得到最后数字,那么前面数字呢?1234得到1就是1234/1000=1234/10/10/10,看到这里相信大家也有思路了吧,可以用循环来/10得到前面数字,当然如果在递归里面就不用循环了。这样循环就是1234-123-12-1,递归返回就变成打印1,打印12%10,打印123%10,打印1234%10

         递归函数就是在函数内间接或直接调用本身函数,其每次返回值或打印值时都会返回到上一次调用的地方,在上面就会返回到figureTrasform(i)下面的printf语句,就不会再次判断执行if,这是我之前知识错点,在这里和大家辨清一下。我还是新手,逻辑还不够清楚,请见谅。

 

  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值