プログラミング コンテストでこの質問に出くわしましたが、答えが見つかりませんでした。だれか助けてください。
Input<<string
Output<<reverse(string)
制約: ループは許可されません。組み込み関数を使用する必要はありません!
再帰を使用します。
#include <stdio.h>
void print_reversed(const char* str) {
if (*str) {
print_reversed(str + 1);
printf("%c", *str);
}
}
int main() {
print_reversed("abcdef");
printf("\n");
}
再帰を使用するという NPE のヒントに基づいて具体的な答えを出すには、文字列の末尾を見つけることと、実際にすべてを交換することの 2 つの目的で再帰を使用する必要があります。
このアプローチを説明する完全なプログラムを次に示します (実行を参照してください)。
#include <stdio.h>
char * find_end_of_string(char *str)
{
return *str ? find_end_of_string(str + 1) : str;
}
void do_reverse_string(char *a, char *b)
{
char tmp;
if (a < b) {
tmp = *a;
*a = *b;
*b = tmp;
do_reverse_string(a + 1, b - 1);
}
}
void reverse_string(char *str)
{
do_reverse_string(str, find_end_of_string(str) - 1);
}
int main() {
char odd[] = "abcde";
char even[] = "abcdef";
reverse_string(odd);
reverse_string(even);
printf("%s\n%s\n", odd, even);
return 0;
}