У меня есть функция, которая рекурсивно делает некоторые вычисления для набора чисел. Я хочу также красиво распечатать вычисления в каждом вызове рекурсии, передав строку из предыдущего вычисления и конкатенируя ее с текущей операцией. Пример вывода может выглядеть следующим образом:
3
(3) + 2
((3) + 2) / 4
(((3) + 2) / 4) x 5
((((3) + 2) / 4) x 5) + 14
... and so on
Итак, второй вызов получает 3 и добавляет + 2 к нему, третий вызов проходит (3) + 2 и т. Д. Мой прототип рекурсивной функции выглядит так:
void calc_rec(int input[], int length, char * previous_string);
Я написал 2 вспомогательные функции, чтобы помочь мне с операцией, но они взрываются, когда я проверяю их:
/**********************************************************************
* dynamically allocate and append new string to old string and return a pointer to it
**********************************************************************/
char * strapp(char * old, char * new)
{
// find the size of the string to allocate
int len = sizeof(char) * (strlen(old) + strlen(new));
// allocate a pointer to the new string
char * out = (char*)malloc(len);
// concat both strings and return
sprintf(out, "%s%s", old, new);
return out;
}
/**********************************************************************
* returns a pretty math representation of the calculation op
**********************************************************************/
char * mathop(char * old, char operand, int num)
{
char * output, *newout;
char fstr[50]; // random guess.. couldn't think of a better way.
sprintf(fstr, " %c %d", operand, num);
output = strapp(old, fstr);
newout = (char*)malloc( 2*sizeof(char)+sizeof(output) );
sprintf(newout, "(%s)", output);
free(output);
return newout;
}
void test_mathop()
{
int i, total = 10;
char * first = "3";
printf("in test_mathop\n");
while (i < total)
{
first = mathop(first, "+", i);
printf("%s\n", first);
++i;
}
}
strapp () возвращает указатель на вновь добавленные строки (works), а mathop () должен принимать старую строку вычисления ("(3) +2"), операнд с символом ('+', '-' и т. д.) и int, и возвращают указатель на новую строку, например "((3) +2) / 3". Есть идеи, где я все испортил? спасибо.