複利計算(数列の続き)

10000 円を 利率 月1%で 複利で 預ける

複利法: 利息を 元金に組み入れる

元金 10000円なら 1ヶ月後 は 利息が 100円ついて 10100円になる(これが1ヶ月後 の元金)
(* 10000 0.01)  金利
(+ 10000 (* 10000 0.01)) 元金 と 金利の合計
なので 2ヶ月後 は 利息が 101円ついて 10201円になる(これが2ヶ月後 の元金)
(* 10100 0.01)  金利
(+ 10100 (* 10100 0.01)) 元金 と 金利の合計

(+ 10100 (* 10100 0.01)) 元金 と 金利の合計
これは
(* 10000 1.01) でも いいね

(* 10100 (+ 1 0.01))  を分配法則でばらすと
(+ (* 10100 1) (* 10100 0.01))   なので

(+ 10100 (* 10100 0.01)) 
nヶ月後の金額は その前月の金額に 1.01 掛けた値になるよね
(define azukeru (lambda (n)
  (cond ((= n 1) 10100)
        (else (* (azukeru (- n 1)) 1.01)))))
0ヶ月後は 元金 10000 と考えたら
(define azukeru (lambda (n)
  (cond ((= n 0) 10000)
        (else (* (azukeru (- n 1)) 1.01)))))

練習

元金 a
月利 b
の 複利法で
nヶ月後
の金額を 求めよ

研究

前月の金額は (azukeru (- n 1)) なので
(azukeru (- n 1)) に 金利を掛けた (* 0.01 (azukeru (- n 1)))が 利息になる

なので

(+ (azukeru (- n 1)) (* 0.01 (azukeru (- n 1)))) 今月の元金
(define azukeru2 (lambda (n)
  (cond ((= n 0) 10000)
        (else (+ (azukeru2 (- n 1)) (* 0.01 (azukeru2 (- n 1))))))))
このプログラムは間違っていませんが nが30ぐらいになると 止まったようになります。なぜでしょう
gistで見る

積立貯金

毎月 10000 円を 月利 1% の 複利法 で 積み立てる
1ヶ月後 は 利息が 100円ついて
10100円になる(これが1ヶ月後 の元金)
2ヶ月後
元金 10000円 + 10100円になる
利息が (* 0.01 (+ 10000 10100))
(define tumitate (lambda (n)
  (cond ((= n 0) 0)
        (else (* 元金 1.01)))))


元金は前月前の積立額に当月分の積立額を足したもの

前月前の積立額 (tumitate (- n 1))
当月分の積立額 10000
(define tumitate (lambda (n)
  (cond ((= n 0) 0)
        (else (* (+ (tumitate (- n 1)) 10000) 1.01)))))