1

我正在尝试编写一个尾递归函数poly,该函数将计算给定值和系数列表的多项式的值。如,如果 coeff 是系数列表,(a0, a1, a2,...an)则应(poly x coeff)计算该值a0 + a1x +a2*x^2 + a3*x^3 + ...an*x^n

这些函数也有望在线性时间内运行 (O(n))

我对此的想法是创建一个辅助函数,它有一个额外的参数(acc)来跟踪你在列表中的位置,所以你知道将它提升到什么权力,但我想不出该怎么做

4

1 回答 1

0

不需要辅助函数来跟踪您在列表中的位置,因为您一次只需要向前移动一个列表元素直到到达末尾。这是一个可能的骨架

(define (poly coeff)
  (let loop ((power 0) (total 0) (clist coeff))
    (cond
       ((null? clist) ???)
       (else (loop (+ 1 power) (??????) (cdr clist))))))

这就是为你完成的大部分工作。你真正需要做的就是弄清楚你应该如何计算指数和加法。有两个基本选项,我知道我会选择哪一个(更少的 cpu 周期)。

于 2012-10-10T23:40:10.030 回答