Math Battle [ 0141: 黄金比の再帰的な求めかた ]

[ 0141: 黄金比の再帰的な求めかた ]


[ 三方万理先生の出題 ]

黄金比 Φ (約 1.618) は連分数でも平方根の入れ子の形でも表現できます。

黄金比 Φ の値を再帰的に求めてください。

■ 連分数の値は乗児君。
■ 平方根の入れ子の値は正憲君。

いずれも簡単にプログラムが書けると思います。


[ 大宙乗児君の回答 ]

連分数の式を再帰的に計算してみました。

#!/usr/bin/perl

$N = 100;

MAIN: {
 printf("N: %d 黄金比の近似値: %.4f\n",
  $N, (v(1, 1)));
}
sub v {
 my ($level, $sum) = @_;

 $sum += 1/v($level+1, $sum) if ($level < $N);

 return($sum);
}

N: 100 黄金比の近似値: 1.6180


[ 広世正憲君の回答 ]

平方根の入れ子の値を再帰的に計算してみました。

#!/usr/bin/perl

$N = 100;

MAIN: {
 printf("N: %d 黄金比の近似値: %.4f\n",
  $N, (v(1, 0)));
}
sub v {
 my ($level, $sum) = @_;

 $sum += sqrt(1 + v($level+1, $sum)) if ($level < $N);

 return($sum);
}

N: 100 黄金比の近似値: 1.6180


[ 三方万理先生のコメント ]

二人ともよくできました。正解です。

これらのプログラム例では再帰的サブルーチンは その中で自分自身を 1 回呼び出すだけですから、 N が増えてもスタック領域の消費が急速に増えるわけではありませんね。

[ 0161: 次の記事 ]

[ 0160: 円内の4本の弦 ]

[ 0159: ドーナツの面積 ]

[ 0158: 4次方程式の解 ]

[ 0157: アクセス解析 ]

[ 0156: 半径を求める ]

[ 0155: パイを100人で分ける ]

[ 0154: x^3+y^3+z^3=33 ]

[ 0153: パイを分ける ]

[ 0152: 黄金比を方程式で求める ]

[ 0151: 0045の訂正 ]

[ 0150: ヘロンの公式の証明 ]

[ 0149: Gabriel's Horn ]

[ 0148: sin(α)*sin(β)*sin(θ) ]

[ 0147: 3個の半円と1個の円 ]

[ 0146: i^(i^(i^(i^(i... の値は? ]

[ 0145: x^3 = 3^x の解は? ]

[ 0144: x!=x のxは? ]

[ 0143: 角度δを求める ]

[ 0142: 三角形の面積の最大値 ]

[ 0141: 黄金比の再帰的な求めかた ]

[ 0140: 前の記事 ]

[ トップページへ ]