A Perfect Night For Bananafish

だがそれを語るには人生は短すぎる

階乗を求める

nの階乗は n! = n*(n-1)*....*1
n=0のとき0! = 1
再帰的に求める

def recursive_fact(n)
	if (n==0)
		return 1
	else
		return recursive_fact(n-1)*n
	end
end

自分の環境ではn=6062を超えるとstack level too deep (SystemStackError)になってしまった。

  • -

実は普通のループの方が計算は速い

def fact(n)
	f=1
	if (n==0)
		return f
	end
	(1..n).each(n){ |i|
		f=f*i
	}
	return f
end
  • -

Mix-inのinjectメソッド(各要素についてブロックを起動し、最後のブロックの返り値をメソッドの返り値として返す)を使って書くこともできる。(参考: injectメソッドで100の階乗を求める(Ruby)

def inject_fact(n)
	return (1..n).inject(1) {|f, i| f * i}
end