История изменений
Исправление HolyBoy, (текущая версия) :
-- recursion version
--
fermaPyr 0 = 0
fermaPyr n = fermaTria n + fermaPyr (n - 1)
-- tail recursion version
--
fermaPyr' n = let fAcc 0 a = a
fAcc n a = fAcc (n - 1) (fermaTria' n + a)
in fAcc n 0
-- tail recursion ver.2
--
fermaPyr'' 0 = 0
fermaPyr'' n = fermaTria' n + fermaPyr'' (n - 1)
-- recursion version
--
fermaTria 0 = 0
fermaTria n = n + fermaTria (n - 1)
-- tail recursion version
fermaTria' n = let fAcc 0 a = a
fAcc n a = fAcc (n - 1) (n + a)
in fAcc n 0
main = do
let a = fermaPyr 10000
b = fermaPyr' 10000
c = fermaPyr'' 10000
putStrLn $ show a
--putStrLn $ show b
--putStrLn $ show c
Вот так лучше?
Смысл этого упражнения был в том, чтобы понять, как работает хвостовая рекурсия.
Исправление HolyBoy, :
-- recursion version
--
fermaPyr 0 = 0
fermaPyr n = fermaTria n + fermaPyr (n - 1)
-- tail recursion version
--
fermaPyr' n = let fAcc 0 a = a
fAcc n a = fAcc (n - 1) (fermaTria' n + a)
in fAcc n 0
-- tail recursion ver.2
--
fermaPyr'' 0 = 0
fermaPyr'' n = fermaTria' n + fermaPyr'' (n - 1)
-- recursion version
--
fermaTria 0 = 0
fermaTria n = n + fermaTria (n - 1)
-- tail recursion version
fermaTria' n = let fAcc 0 a = a
fAcc n a = fAcc (n - 1) (n + a)
in fAcc n 0
main = do
let a = fermaPyr 10000
b = fermaPyr' 10000
c = fermaPyr'' 10000
putStrLn $ show a
--putStrLn $ show b
--putStrLn $ show c
Вот так лучше?
Смысл этого упраженения был в том, чтобы понять, как работает хвостовая рекурсия.
Исходная версия HolyBoy, :
-- recursion version
--
fermaPyr 0 = 0
fermaPyr n = fermaTria n + fermaPyr (n - 1)
-- tail recursion version
--
fermaPyr' n = let fAcc 0 a = a
fAcc n a = fAcc (n - 1) (fermaTria' n + a)
in fAcc n 0
-- tail recursion ver.2
--
fermaPyr'' 0 = 0
fermaPyr'' n = fermaTria' n + fermaPyr'' (n - 1)
-- recursion version
--
fermaTria 0 = 0
fermaTria n = n + fermaTria (n - 1)
-- tail recursion version
fermaTria' n = let fAcc 0 a = a
fAcc n a = fAcc (n - 1) (n + a)
in fAcc n 0
main = do
let a = fermaPyr 10000
b = fermaPyr' 10000
c = fermaPyr'' 10000
putStrLn $ show a
--putStrLn $ show b
--putStrLn $ show c
Вот так лучше?
Смысл этого упраженения был в том, чтобы понять, как работает хвостовая рекурсия.