對於乙個多項式:
求值,我們可以化簡找出其規律,利用horner 規則化簡:
可以明顯看出多項式的遞迴規律:從an開始,(+ (* an x) a(n-1)),下乙個也是如此,直到a0。
之前建立的accumulate過程,也有相似的遞迴性,應該是一類過程,accumulate的原始定義:
(define
(accumulate op initial sequence)
(if (null? sequence)
initial
(op(car sequence)
(accumulate op initial (cdr sequence)))))
op 是對資料的操作,從簡單的加減乘除到複雜的自定義運算。
initial是初始資料,說明它是個什麼的累加,比如數或者表
sequence是待處理的資料
那麼結合此多項式的計算規律,對於多項式的計算可以抽象成**:
(define
(hover_eval x sequence)
(accumulate
(lambda
(this_coeff higher_terms)
(+ (*
x this_coeff) higher_terms))
0 sequence))
手動模擬線性遞迴過程:
(horner-eval
2(list13
0501))
(accumulate
(lambda
(this-coeff higher-terms)
?>)
0(list13
0501))(+1
(*2(accumulate
(lambda
(this-coeff higher-terms)
?>)
0(list30
501))))(+1
(*2(+3
(*2(accumulate
(lambda
(this-coeff higher-terms)
?>)
0(list05
01))))))(+1
(*2(+3
(*2(+0
(*2(accumulate
(lambda
(this-coeff higher-terms)
?>)
0(list50
1))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(accumulate
(lambda
(this-coeff higher-terms)
?>)
0(list
01))))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(+0
(*2(accumulate
(lambda
(this-coeff higher-terms)
?>)
0(list
1))))))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(+0
(*2(+1
(*2(accumulate
(lambda
(this-coeff higher-terms)
?>)
0'())))))))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(+0
(*2(+1
(*20))))))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(+0
(*2(+1
0)))))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(+0
(*21))))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*2(+0
2)))))))))(+1
(*2(+3
(*2(+0
(*2(+5
(*22))))))))(+1
(*2(+3
(*2(+0
(*2(+5
4)))))))(+1
(*2(+3
(*2(+0
(*29))))))(+1
(*2(+3
(*218))))(+1
(*2(+3
36)))(+1
(*239))(+1
78)79
多項式加法
題目內容 乙個多項式可以表達為x的各次冪與係數乘積的和,比如 現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。程式要處理的冪最大為100。輸入格式 總共要輸入兩個多項式,每個多項式的輸入格式如下 每行輸入兩個數字,第乙個表示冪次,第二個表示該冪次的係數...
多項式加法
題目內容 乙個多項式可以表達為x的各次冪與係數乘積的和,比如 2x6 3x5 12x3 6x 20 現在,你的程式要讀入兩個多項式,然後輸出這兩個多項式的和,也就是把對應的冪上的係數相加然後輸出。程式要處理的冪最大為100。輸入格式 總共要輸入兩個多項式,每個多項式的輸入格式如下 每行輸入兩個數字,...
多項式加法
給定兩個多項式p x 與q x 通過鍊錶實現它們的加法。有若干組,每組有2個多項式。每組輸入時先輸入第1個多項式,再輸入第2個多項式。每組用若干對整數表示,依序每兩個相鄰的整數表示多項式的一項,分別是它的係數和冪。當輸入的冪為負數時,表示乙個多項式的結束。乙個多項式中各項的次序是隨機的。對每組中兩個...