SICP自己做的答案(Haskell)

第一章

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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值