# Exercise 4.12 - convert integer into string by calling recursive routine¶

## Question¶

Adapt the ideas of printd to write a recursive version of itoa; that is, convert an integer into a string by calling a recursive routine.

```
/* recursive version of itoa; that converts an integer string by calling a recursive routine */
#include<stdio.h>
#include<math.h>
#define MAXLEN 100
void itoa(int n,char s[]);
int main(void)
{
int n;
char s[MAXLEN];
n = 1723;
itoa(n,s);
printf("%s",s);
return 0;
}
void itoa(int n,char s[])
{
static int i;
if(n/10)
itoa(n/10,s);
else
{
i = 0;
if( n < 0)
s[i++]='-';
}
s[i++] = abs(n) % 10 + '0';
s[i] = '\0';
}
```

## Explanation¶

The main part of this program is the itoa routine, which takes an integer n and string s and is called recursively.

```
void itoa(int n,char s[])
{
static int i;
if(n/10)
itoa(n/10,s);
else
{
i = 0;
if( n < 0)
s[i++]='-';
}
s[i++] = abs(n) % 10 + '0';
s[i] = '\0';
}
```

In the first invocation from the main program, this is called with n = 1723 and within the program the number n is divided by 10 (until it is less than 10), and the new number (which is old number / 10) is called with itoa again. When we reach the first digit of the number, the number is converted to a string using abs(n) % 10 + ‘0’ and stored in the s array. The array is closed with 0, in subsequent recurssion, the next values like 7,2,3 will override 0 stored from the previous iteration and in the last call of the recursion, the number the complete number is transformed from integer to string. s will look like [‘1’,’7’,’2’,’8’,’0’] and this will be printed in the main program.