2015년 1월 27일 화요일

erlang 에피소드 - factorial

erlang 을 좀 익혀 보려 하는 중입니다.

튜토리얼 사이트 예제 중에 factorial 예제 코드가 있습니다.

-module(tut).

-export([factorial/1]).

factorial(1)->1;
factorial(x)->x * factorial(x-1).

흡사 c++ template 특수화 구현과 비슷한 느낌을 줍니다.

아무튼..

tut:facto(10).
3628800
tut:facto(100).
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

잘 동작하는 듯 합니다.

그래서 한 번 무작정 큰 수를 넣어 봤습니다.

tut:facto(111111111111111111111111111111111111111).

.....

컴퓨터가 먹통이 되버렸네요.

제한이 필요해 보였습니다. 검색을 좀 해보니,

factorial(x)->
    if x > 100 -> factorial(100);
      x == 1 -> 1;
      true -> x * factorial(x-1)
    end.

이런식으로 해주면 되더군요.

또는

facto(1)->
1;
facto(X) when X > 10 ->
facto(10);
facto(X)->
X*facto(X-1).


댓글 없음:

댓글 쓰기