任务描述
本关任务:用递归法将一个整数 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,这是我之前知识错点,在这里和大家辨清一下。我还是新手,逻辑还不够清楚,请见谅。