C言語で文字列を反転させる再帰関数

はじめに

こんな問題を見つけたので、やってみました。

C言語で再帰を使って文字列を反転させよ。
制限時間5分。

#include <stdio.h>
#include <string.h>

void reverse( char* str )
{
    // ここだけを編集してください。
}

int main( int argc, char** argv )
{
    char* str = argv[1];
    reverse( str );
    printf( "%s\n", str );
    return 0;
}

via C言語で文字列を反転させる再帰関数 - オピニオネイティッド - 棚瀬のブログ

やってみた

reverse()関数にはchar*型の引数1つしか渡せないっぽいのでちょっと悩みました。結局static変数でなんとかすることに。
もうちょっとかっこいいやり方ないかなー。

#include <stdio.h>
#include <string.h>

void reverse(char* str)
{
  static int i = 0;
  int len = strlen(str);
  char tmp;
  if (i >= len / 2)
    return;
  tmp = str[i];
  str[i] = str[len - 1 - i];
  str[len - 1 - i] = tmp;
  i++;
  reverse(str);
}

int main(int argc, char** argv)
{
  char* str = argv[1];
  reverse(str);
  printf("%s\n", str);
  return 0;
}

まとめ

static変数初めて使いました。今後もあんまり使う機会ないかも。