factTU :: Int -> Int u :: Int -> Int -> Int -> Int factTU(x) -> u(x, 1, 1) u(x, i, a) -> a | i>x u(x, i, a) -> u(x, i+1, i*a) | i<=x factRU :: Int -> Int U :: Int -> Int -> Int factRU(x) -> U(1, x) U(i, x) -> x | i>x-1 U(i, x) -> i*U(i+1, x) | i<=x-1 tailup :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int tailup(F, i, y, a) -> a | i > y tailup(F, i, y, a) -> tailup(F, i + 1, y, F(i, a)) | i ≤ y recup :: (Int -> Int -> Int) -> Int -> Int -> Int -> Int recup(F, i, y, a) -> a | i > y recup(F, i, y, a) -> F(recup(F, i + 1, y, a), i) | i ≤ y helper :: Int -> Int -> Int helper(x, y) -> y*x