sicp每日一题[2.34]

59 篇文章 0 订阅
55 篇文章 0 订阅

Exercise 2.34

Evaluating a polynomial in x at a given value of x can be formulated as an accumulation. We evaluate the polynomial

a n x n + a n − 1 x n − 1 + . . . + a 1 x + a 0 a_nx^n+a_{n-1}x^{n-1}+...+a_1x+a_0 anxn+an1xn1+...+a1x+a0

using a well-known algorithm called H o r n e r ’ s   r u l e Horner’s\ rule Horners rule, which structures the computation as

( . . . ( a n x + a n − 1 ) x + . . . + a 1 ) x + a 0 . (...(a_nx+a_{n-1})x+...+a_1)x+a_0. (...(anx+an1)x+...+a1)x+a0.

In other words, we start with a n a_n an, multiply by x, add a n − 1 a_{n−1} an1, multiply by x, and so on, until we reach a 0 a_0 a0.

Fill in the following template to produce a procedure that evaluates a polynomial using Horner’s rule. Assume that the coefficients of the polynomial are arranged in a sequence, from a 0 a_0 a0 through a n a_n an.

(define (horner-eval x coefficient-sequence)
  (accumulate (lambda (this-coeff higher-terms) <??>)
              0
              coefficient-sequence))

For example, to compute 1 + 3 x + 5 x 3 + x 5 1+3x+5x^3+x^5 1+3x+5x3+x5 at x = 2 x = 2 x=2 you would evaluate

(horner-eval 2 (list 1 3 0 5 0 1))

这道题挺简单的,主要是题目里给的参数名起的太好了,本来我还不知道咋写的,一看 this-coeff 和 higher-terms 这俩参数,瞬间就明白了。

(define (horner-eval x coefficient-sequence)
  (accumulate (lambda (this-coeff higher-terms) (+ (* higher-terms x) this-coeff))
              0
              coefficient-sequence))


(horner-eval 2 (list 1 3 0 5 0 1))

; 执行结果
79
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值