我正在尝试编写一个尾递归函数poly
,它将计算给定值和系数列表的多项式的值。如果,如果coeff是系数列表(a0, a1, a2,...an)
,则(poly x coeff)
应计算值a0 + a1x +a2*x^2 + a3*x^3 + ...an*x^n
预计这些函数也会以线性时间(O(n))
运行我对此的想法是创建一个辅助函数,它有一个额外的参数(acc),可以跟踪你在列表中的位置,这样你就知道将它提升到什么样的力量,但是我想不出如何那样做
答案 0 :(得分:0)
不需要辅助函数来跟踪列表中的位置,因为您只需要一次向前移动一个列表元素,直到结束。这是一个可能的骨架
(define (poly coeff)
(let loop ((power 0) (total 0) (clist coeff))
(cond
((null? clist) ???)
(else (loop (+ 1 power) (??????) (cdr clist))))))
这大部分都是为你而做的。你真正需要做的就是弄清楚你应该如何计算指数和加法。有两个基本选项,我知道我会选择哪一个(更少的cpu周期)。