* 꼬리 재귀호출과 패턴 매칭을 이용하여 구현한 팩토리얼과 피보나치 수열 계산
Filename: fact.hs
Rapid factorial and fibonacci seq implementations
by pattern matching and tail recursive call
Compile: ghc fact.hs
Execute: main
Date: 2010/07/20
Author: phkim pkim (AT) scripts.pe.kr
-}
module Main where
factorial :: Integer -> Integer
factorial n = recfact 1 n
recfact :: Integer -> Integer -> Integer
recfact acc k = case k of
0 -> acc
k-> recfact (acc*k) (k - 1)
fib :: Integer -> Integer
fib n = fibGen 0 1 n
fibGen :: Integer -> Integer -> Integer -> Integer
fibGen a b n = case n of
0 -> a
n -> fibGen b (a + b) (n - 1)
main :: IO ()
main = do
print ("Factorial(30000) has " ++ show (length (show (factorial 30000))) ++ " digits")
print ("Fibonacci(200000) has " ++ show (length (show (fib 200000))) ++ " digits")
{-
Expected result:
"Factorial(30000) has 121288 digits"
"Fibonacci(200000) has 41798 digits"
-}
'프로그래밍 > Haskell' 카테고리의 다른 글
Haskell 언어로 복소수 계산과 분수 계산 쉽게 하기 (0) | 2012.05.27 |
---|---|
이차방정식 풀이 with Haskell (0) | 2012.05.23 |
숫자 맞추기 게임 with Haskell (0) | 2009.10.29 |
Haskell 언에에서 형(type) 변환하기 (0) | 2009.10.19 |
if...else... 조건문 사용 예제 for Haskell (0) | 2009.10.19 |