进制转换函数把循环改为使用递归

问题遇到的现象和发生背景
用代码块功能插入代码,请勿粘贴截图
我想要达到的结果

将void xie(char *buffer, int x, int base)函数里循环改为使用递归调用,三个参不变

#include <stdio.h>
void swap(char *a, char *b)
{
    char t = *a;
    *a = *b;
    *b = t;
}
 
void xie(char *buffer, int x, int base)
{
 
    char *p = buffer;
    if (x == 0)
    {
        *p++ = '0';
    }
    else
    {
        while (x > 0)
        {
            int n = x % base;
            if (n < 10)
                *p++ = '0' + n;
            else
                *p++ = 'A' + n - 10;
            x /= base;
        }
    }
    *p = '\0';
    --p;
    while (buffer < p)
        swap(buffer++, p--);
}
 
int main()
{
    char buffer[255];
    int bases[] = {2, 5, 6, 8, 13, 16, 20}, x;
    scanf("%d", &x);
    for (int i = 0; i < sizeof(bases) / sizeof(int); i++)
    {
        xie(buffer, x, bases[i]);
        printf("%d: %s\n", bases[i], buffer);
    }
    return 0;
}

修改如下:
需要将buffer定义为全局变量

#include <stdio.h>
char buffer[255] = {0};
void swap(char *a, char *b)
{
    char t = *a;
    *a = *b;
    *b = t;
}

void xie(char *buf, int x, int base)
{
    if (x == 0)
    {
        *buf = 0;
        buf--;
        char *p = buffer;
        while (p < buf)
            swap(p++, buf--);
    }
    else
    {
        int n = x % base;
        if (n < 10)
            *buf = '0' + n;
        else
            *buf = 'A' + n - 10;
        xie(buf+1,x/base,base);
    }
}
 
int main()
{
    int bases[] = {2, 5, 6, 8, 13, 16, 20}, x;
    scanf("%d", &x);
    for (int i = 0; i < sizeof(bases) / sizeof(int); i++)
    {
        xie(buffer, x, bases[i]);
        printf("%d: %s\n", bases[i], buffer);
    }
    return 0;
}

void xie(char *buffer, int x, int base)
{
    if (x == 0)
    {
        *buffer = 0;
        return;
    }
    int n = x % base;
    if (n < 10)
        *buffer = '0' + n;
    else
        *buffer = 'A' + n - 10;
    xie(buffer + 1, x / base, base);
}
void restr(char *buf)
{
    char t;
    int len = 0;
    while (buf[len])
        len++;
    len--;
    for (int i = 0; i <= len / 2; i++)
    {
        t = buf[i];
        buf[i] = buf[len - i];
        buf[len - i] = t;
    }
}

int main()
{
    char buffer[255];
    int bases[] = {2, 5, 6, 8, 13, 16, 20}, x;
    scanf("%d", &x);
    for (int i = 0; i < sizeof(bases) / sizeof(int); i++)
    {
        xie(buffer, x, bases[i]);
        restr(buffer);
        printf("%d: %s\n", bases[i], buffer);
    }
    return 0;
}