- バックアップ一覧
- ソース を表示
- 授業/C言語基礎/再帰呼び出し(練習問題の解答例) は削除されています。
- 1 (2015-12-21 (月) 15:50:12)
- 2 (2015-12-21 (月) 19:16:42)
フィボナッチ数 †
定義をそのまま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; }