フィボナッチ数

定義をそのままswitch文で書くと、次のようになります。

/*
 * ユークリッドの互除法
 * ただし a > b >= 0
 */
int gcd(int a, int b) {
  return b == 0 ? a : gcd(b, a % b);
}

このswitch文では、return文で戻り値を返してしまうので、break文は要りません。

大きな数のフィボナッチ数を求めたいときは、戻り値をunsigned long型にしましょう。

ちなみに、この関数を使ってフィボナッチ数 [math]f_{10}[/math] を求めるためのmain関数は次のようになります。

int main(void) {
  printf("%d\n", f(10));
  return 0;
}

ユークリッドの互除法

/*
 * ユークリッドの互除法
 * ただし a > b >= 0
 */
int gcd(int a, int b) {
  return b == 0 ? a : gcd(b, a % b);
}

ちなみに、この関数を使って 84 と 49 の最大公約数を求めるmain関数は次のようになります。

int main(void) {
  printf("%d\n", gcd(84, 49));
  return 0;
}

基数変換

/*
 *  10進数を2進数に基数変換して出力する
 */
void radconv(int n) {
  if (n > 1) { radconv(n / 2); }
  printf("%d", n % 2);
}

再帰呼び出しと最下位ビットの出力の順序に気をつけましょう。

int型とint型の除算 / の結果はint型になるため、n / 2 の余りが無視されることを利用しています。

ちなみに、この関数を使って10進数 65 を2進数に変換して出力するmain関数は次のようになります。

int main(void) {
  radconv(65);
  return  0;
}

ハノイの塔

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS