您的位置:首页 > 其它

初步实现无循环(则递归)将任意整数转任意进制字符串

2014-03-24 00:41 441 查看
不用循环的算法可以寻求递归来实现。

对于这个最大整数转为二进制时递归最深,64位64倍固定栈大小?。

itoa将num按radix进制转换字符串到rec_array缓冲区,其中缓冲区未检测。

#include"stdio.h"
#include"string.h"

int trace_counter = 0;
char *trace_array;
char *rec_itoa(int num, char *rec_array, int radix);

char *itoa(int num, char *array, int radix)
{
char *rec_array = array;
trace_array = array;        // trace
if (num < 0)
{
num = -num;
*array = '-';
rec_array++;
trace_counter++;        // trace
}
else if (num == 0)
*array = 0 - '0';
rec_array = rec_itoa(num, rec_array, radix);
*rec_array = 0;
return array;
}

char *rec_itoa(int num, char *rec_array, int radix)
{
static char array_0_z[] = "0123456789abcdefghijklmnopqrstuvwxyz";
printf("trace num : %d. \n", num);
if (num >= radix)
{
rec_array = rec_itoa(num / radix, rec_array, radix);
num %= radix;
}

*rec_array = array_0_z[num];

printf("trace_%d: updata array[%d] = %c, now array = '%*s'\n", trace_counter, rec_array - trace_array, *rec_array, trace_counter + 1, trace_array);    // trace;

trace_counter++;            // trace
return ++rec_array;
}

// return buf+1 to change the pointer buf instead of moving it in a recursive char *rec(char **buf, int len); will change buf.
// function.
char *rec(char *buf, int len)
{
if (len)
buf = rec(buf, len - 1);
printf("rec %s\n", buf++);
return buf;
}

void rec_to_change_buf_is_na(char *buf, int len)
{
// codes here are the same to the above but the last line;
}

int main()
{
char buf[100] = "++++++++";
printf("result: %s\n", itoa(244, buf, 2));
char rec_buf[] = "201308021926";
rec(rec_buf, strlen(rec_buf));

//char * p= "abcde";
//int a = (++p)++;
//printf("a = %d\n", a);

int *p[6], (*p2)[4];
int arr[6][4];
printf("\narr = %p,  arr[0] = %p\n", arr,arr[0]);
p[0] = arr[0];
p2 = arr;
p2++;
printf("p = %p,  p2 = %p\n\n%d\n",p, p2, 2^3);

}

/*
ouptput :
trace num : 244.
trace num : 122.
trace num : 61.
trace num : 30.
trace num : 15.
trace num : 7.
trace num : 3.
trace num : 1.
trace_0: updata array[0] = 1, now array = '1+++++++'
trace_1: updata array[1] = 1, now array = '11++++++'
trace_2: updata array[2] = 1, now array = '111+++++'
trace_3: updata array[3] = 1, now array = '1111++++'
trace_4: updata array[4] = 0, now array = '11110+++'
trace_5: updata array[5] = 1, now array = '111101++'
trace_6: updata array[6] = 0, now
array = '1111010+'
trace_7: updata array[7] = 0, now array = '11110100'
result: 11110100
rec 201308021926
rec 01308021926
rec 1308021926
rec 308021926
rec 08021926
rec 8021926
rec 021926
rec 21926
rec 1926
rec 926
rec 26
rec 6
rec
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐