튜토리얼 사이트 예제 중에 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).
또는
facto(1)->
1;
facto(X) when X > 10 ->
facto(10);
facto(X)->
X*facto(X-1).
댓글 없음:
댓글 쓰기