階乗計算

階乗の計算、カードの並べ替え、ハノイの塔、 などは実は同じことの繰り返しである。 まずは階乗計算をプログラムにしたものを見てみよう。

「ある正の整数 n について、その階乗を求めよ。」という定義は、

n! = n * (n-1) * (n-2) * ... * 2 * 1

である。これの意味するところは「n から順番に一つ小さい数を掛けていって、 1 になるまで求めよ」である。もちろん while -- end や for -- end を使ってもよいが、method を用いることもできる。 factorial.rb


#!/usr/koeki/bin/ruby

def factorial(m)
  if m == 1
    1
  else
    m * factorial(m-1)
  end
end

n = 1
# n = 2
# n = 3
# n = gets.chomp.to_i

printf("%dの階乗は%dです\n", n, factorial(n))

n = 1 の場合は 1 である。n = 2 の場合と n = 3 の場合を入れて確かめてみよう。 def -- end の中で、n > 1 ならば、

n かける factorial(n-1)

を実行する。n - 1 = 1 (n = 2 のとき) なので、 factorial(1) = 1 が入る。よって答えは 2 * 1 = 2 を得る。

n = 3 の場合は、n - 1 = 2 (n = 3 のとき)なので、 factorial(2) をかければよい。factorial(2) は、前の結果を使って 2 なので、 3 * 2 = 6 を得る。以下同様。

n = 1 の場合を理解したら、n = 2, n = 3 ... と入れ換える。最後に、 n = 1 に # をつけて、残りの # を外して、 入力して答えが得られるようにせよ。

コマンドライン入力で作りかえてみよ。

基礎プログラミング II / 2007 年度

Madoka Nishimura <madoka@e.koeki-u.ac.jp>