2017-06-25 12 views
0

と私はエリクシールで階乗関数を作成する:すべての理解再帰はエリクシール

def factorial(0), do: 1 
def factorial(n) when n > 0, do: n * factorial(n - 1) 

まず、私はどのように簡単かつエレガントなソリューションがエリクシールである愛。しかし、理解できないことが1つあります。 2行目では、私はこのコードを使用しました:do: n * factorial(n - 1)。関数に5の引数を与えたとします。その行は次のようになります。 do: 5 * factorial(5 - 1)だからこそ答えが出てこないのはなぜですか?20?基本的に私の質問です。どのようにそれは基本的なケースに続行することを知っていますか?私たちは、プログラムが0になるまで明示的に言わないのですか?もし誰かがこれを打ち破ることができればそれは素晴らしいだろう!

答えて

3

はい、明示的に0になるように指示しています。最初の節はdef factorial(0), do: 1です。その原因は、最終的に0に減少したときに呼び出されます。これは、再帰から抜け出す節です(1を返し、再び階乗を呼び出さない)。

また、when n > 0に注意してください。ガードは、負の数で階乗を呼び出すケースをキャッチするだけです。例えば、factorial(5)の場合は使用されません。