У меня есть эта рекурсивная строковая функция и вспомогательная функция, которая объединяет две строки (указатели на символы):
#include <stdio.h>
#include <stdlib.h>
char* stringcat(char* s1, char* s2)
{
int length=0;
int sizes[2];
int c=0;
while(s1[c]!='\0')
++c;
length=c;
sizes[0]=c;
c=0;
while(s2[c]!='\0')
++c;
length+=c;
sizes[1]=c;
char *comboword=malloc(sizeof(char)*length);
for(int i=0; i<sizes[0]; i++)
comboword[i]=s1[i];
for(int j=sizes[0]; j<length; j++)
comboword[j]=s2[j-sizes[0]];
return comboword;
}
char* mmfu(int mm)
{
char* mmm="mm";
if (mm<=0)
return mmm;
else
return stringcat(mmm,mmfu(mm-1));
}
Я называю это так:
int main()
{
int d;
scanf("%d",&d);
printf("%s %d\n",mmfu(1),d);
}
Для d, равного 1 и 0, выходной сигнал соответствует ожидаемым значениям, мммм (d) и мм (d), но для значений, превышающих 1, выходной сигнал равен like {▒ 6 ммм (с mmfu (3) и d = 6). ) или ▒ {▒ 5 м для ммфу (2) и d = 5. Я могу видеть, что есть некоторый образец к нечетному выводу, но я очень смущен тем, почему это происходит во-первых. Любая помощь приветствуется. Спасибо!