练习4-12 运用printd函数的设计思想编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。
递归真挺难的。。。
#include <stdio.h>
void recursion_itoa(int d, char *ptr, char *s);
void reverse(char *s, char len);
int int_len(int d);
int main()
{
int input, len;
char s[6];
char *p = s;
printf("please input interger:\n");
scanf("%d", &input);
len = int_len(input);
recursion_itoa(input, p, s);
s[len] = '\0';
reverse(s, len);
printf("input in string form:%s\n", s);
return 1;
}
void recursion_itoa(int d, char *ptr, char *s) //递归函数
{
if (d / 10)
{
recursion_itoa(d / 10, ptr + 1, s);
}
*ptr = d % 10 + '0';
return;
}
void reverse(char *s, char len) //因为递归在回溯的时候指针没法保存,只能调用递归前的指针值,所以最终生成的字符串是反的,其实可以用static类型,但我不想搞了。。。
{
int i, j, temp;
for (i = 0, j = len - 1; i < j; i++, j--)
{
temp = s[i];
s[i] = s[j];
s[j] = temp;
}
return;
}
int int_len(int d) //reverse函数需要知道字符串的长度
{
int len = 0;
if (d < 0)
len++;
while (d % 10)
{
d /= 10;
len++;
}
return len;
}