第一章
1.10
递归
f :: Int -> Int
f n
| n < 3 = n
| otherwise = f (n - 1) + 2 * f (n - 2) + 3 * f (n -3)
迭代
f :: Int -> Int
f n
| n < 3 = n
| otherwise = f_iter 0 1 2 n
f_iter :: Int -> Int -> Int -> Int -> Int
f_iter a b c n
| n < 3 = c
| otherwise = f_iter b c (a + 2 * b + 3 * c) (n - 1)
1.11
第n行m列
q11 :: Int -> Int -> Int
q11 n m
| m == 1 = 1
| n == m = 1
| otherwise = q11 (n - 1) (m - 1) + q11 (n - 1) m
1.16
fast_expt :: Int -> Int -> Int
fast_expt b n = fast_expt_iter b n 1
fast_expt_iter :: Int -> Int -> Int -> Int
fast_expt_iter _ 0 a = a
fast_expt_iter b n a
| even n = fast_expt_iter (b * b) (div n 2) a
| otherwise = fast_expt_iter b (n - 1) (a * b)