next up previous
Next: 1.3 レポート課題5A (必修) Up: 1 FOR 〜 NEXT Previous: 1.1 FOR NEXT 構文

1.2 簡単な漸化式

例題1. 定数 $ r$ が与えられたとき、漸化式

$\displaystyle a_1=1,\quad a_{n}=r a_{n-1}$   $\displaystyle \mbox{($n\ge 2$)}$

で定義される数列 $ \{a_n\}_{n\in\N}$ の最初の 100 項を求めよ。 -- 要するに等比数列 $ a_n=r^{n-1}$ ですが、 この仕事を漸化式の通りに遂行するには、 例えば次のようなプログラムを書けば OK です (上の漸化式とプログラムを見比べて下さい)。

配列を使うバージョン touhi1.bas
REM touhi1.BAS
REM 等比数列 (配列を使うバージョン)
DIM A(100)
INPUT PROMPT "r=": r
A(1)=1
print 1;A(1)
FOR n=2 to 100
  A(n)=r*A(n-1)
  print n;A(n)
NEXT n
END

(細かい注: 十進 BASIC の配列は、普通添字が $ 1$ から始まります。 つまり DIM A(100) とすると、 A(1), A(2), A(3), $ \dots$ , A(100) が使えるようになります。 OPTION BASE 0 とすると、添字は 0 から始まります。 DIM A(2 TO 8) のように、 添字の下限と上限を指定することも出来ます。)


やってみよう     DIM, INPUT PROMPT 等の 命令の説明をオンライン・ヘルプで読んでみましょう。


等比数列はものすごい勢いで大きくなったり小さくなったりするので、 演算精度を上げておくべきかもしれません。 これは (1000桁演算モード) ボタンを押しても実現できますが、 プログラムの先頭部分に例えば
1000桁モードで計算する(ボタンを押さなくても)ことを宣言
  OPTION ARITHMETIC DECIMAL_HIGH
と書いてもよいでしょう。

ちょっと質問     ``arithmetic'' って何でしょうね?2単語の意味を確認する習慣を身につけることをお勧めします。 ``decimal'' は分かりますか?


実は一度 A(n-1) として使われた後はもう使われなくなるので、 次のようなプログラムで済ませることが出来ます。
配列を使わないバージョン touhi2.bas
REM touhi2.BAS
REM 等比数列 (配列を使わないバージョン)
INPUT PROMPT "r=": r
A=1
print 1;A
FOR n=2 to 100
  A=r*A
  print n;A
NEXT n
END

配列変数の代りに、 普通の変数 1 個 Aだけで済んでいる理由を理解しましょう。 代入文 A=r*A は、数学に現れる等式とは違って、 一般には

変数名=
と表される (代入文の) 文法に従ったもので、 (1) 最初に = の右にある式を評価し、 (2) その値を = の左にある変数に記憶します。 例えば A=A+1A の値を $ 1$ 増やすコードです。


next up previous
Next: 1.3 レポート課題5A (必修) Up: 1 FOR 〜 NEXT Previous: 1.1 FOR NEXT 構文
桂田 祐史
2013-05-22