(12)[C&ML] 演習1:種々の関数を定義する

[ トップ | 目次 | 前ページ | 次ページ ]


以下の各問に関して,MLの場合はそれら関数を対話モードで呼び出し結果を確認し,Cではそれら関数を呼び出し結果を表示するmain関数を書き実行結果を確認せよ.

  1. 以下の関数を,MLでは再帰的関数として,Cでは繰り返しを使って定義せよ.
    1. xをyで割った商を求める関数 shou(x,y)を引き算を使って定義せよ.
    2. xをyで割ったあまりを求める関数 amari(x,y)引き算を使って定義せよ.
    3. 1からnまでの自然数のk乗の和を求める関数sigmaN(k,n).
    4. 初項A(0)がa公差がbの等差数列のn番目の項 A(a,b,n)を求める関数.
    5. 初項B(0)がa公比がbの等比数列のn番目の項 B(a,b,n)を求める関数.
    6. 初項C(0)がa漸化式 C(n) = b + c * C(n - 1)のn番目の項を求める関数 C(a,b,c,n).
  2. 上記各関数を,MLでは末尾再帰関数として,Cでは再帰的関数として定義し直せ.
  3. 以下の漸化式で定義されるフィボナッチ関数fibを再帰的関数として定義せよ.
    • fib(0) = 1
    • fib(1) = 1
    • fib(n+2) = fib(n+1) + fib(n)
  4. フィボナッチ数を求める関数を、Cなら繰り返しを使った関数に、MLなら末尾再帰する補助関数を使う関数に定義し直せ。さらに、それぞれについてfib (40)を実行し時間を比較せよ。

解答例