霍納規則(C/C++,Scheme)
一、背景
霍納(Horner)規則是採用最少的乘法運算策略,來求多項式
A(x) = a_n x^n + a_{n-1}x^{n-1} + ... + a_1 x + a_0
在x0處的值。
該規則為
A(x_0) = ( ... (( a_n x_0 + a_{n-1}) x_0 + ... + a_1) x_0 + a_0)
二、分析
如果光看著式子或許會有點煩躁,不妨手動設定幾個值到式子中去來手工運算一番,這樣一來也會有些親身的理解。
通過分解我們注意到,從右往左來看,每一個小式子都是如此:
{something} * x_0 + a_i
三、程式碼
C語言版
#include <stdio.h>
#include <stdlib.h>
int hornerRule(int list[],int m,int x0);
int main()
{
int m,x0;
printf("Enter an integer (length of list): \n");
scanf("%d",&m);
int list[m];
printf("Enter some integers for list: \n");
int i;
for(i=m-1;i>=0;i--)
{
scanf("%d",&list[i]);
}
printf("Enter an integer for x0: \n");
scanf("%d",&x0);
printf("%d",hornerRule(list,m,x0));
return 0;
}
int hornerRule(int list[],int m,int x0)
{
if(m<=1)
return list[0];
else
return list[0]+(hornerRule(list+1,m-1,x0))*x0;
}
C++語言版
#include <iostream>
using namespace std;
int hornerRule(int list[],int m,int x0);
int main()
{
int m,x0;
cout<<"Enter an integer (length of list):"<<endl;
cin>>m;
int list[m];
cout<<"Enter some integers for list:"<<endl;
for(int i=m-1;i>=0;i--)
{
cin>>list[i];
}
cout<<"Enter an integer for x0:"<<endl;
cin>>x0;
cout<<hornerRule(list,m,x0);
return 0;
}
int hornerRule(int list[],int m,int x0)
{
if(m<=1)
return list[0];
else
return list[0]+(hornerRule(list+1,m-1,x0))*x0;
}
四、測試
五、進階
(PS:博主有一段時間沒有碰Scheme有點忘了,所以下面的程式碼可能有些……粗糙)
關於Scheme可以看這裡:
專欄:SICP練習
專欄:Scheme歸納
(define (Horner list m x0)
(define (Horner-iter ls n)
(if (<= n 1)
(car ls)
(+ (car ls) (* (Horner-iter (cdr ls) (- n 1)) x0))))
(Horner-iter list m))
(define list '(1 2 1 0 3 1))
;Value: list
(Horner list 6 10)
;Value: 130121
為使本文得到斧正和提問,轉載請註明出處:
http://blog.csdn.net/nomasp
相關文章
- 【ASM C/C++】 Makefile 規則說明ASMC++
- [C++][程式設計風格]C++命名規則C++程式設計
- 斐波那契數(C/C++,Scheme)C++Scheme
- C++ 變數初始化規則C++變數
- 市場購物籃分析(規則歸納/C5.0)+apriori
- C/C++—— 記憶體位元組對齊規則C++記憶體
- C++ include標頭檔案引入規則C++
- [C++]變數宣告與定義的規則C++變數
- 【C++學習筆記】列表初始化規則C++筆記
- 高質量C/C++程式設計指南總結(三)—— 命名規則C++程式設計
- Google C++程式設計風格指南(八):規則之例外GoC++程式設計
- 高質量C++/C程式設計指南(第3章 命名規則) (轉)C++C程式程式設計
- C++程式設計規範-101條規則準則與最佳實踐電子書pdf下載C++程式設計
- Performanced C++ 經驗規則(4):靜態和多型,亦敵亦友ORMC++多型
- C/C++記憶體對齊原則C++記憶體
- C# sizeof 計算規則C#
- C++設計模式的原則C++設計模式
- C++ 3/5 法則相關C++
- Performanced C++ 經驗規則(5):再談過載、覆蓋和隱藏ORMC++
- JavaScript識別符號命名規則總結和保留字歸納JavaScript符號
- 公司C++規範學習C++
- (C++)DP動態規劃C++動態規劃
- Performanced C++ 經驗規則(1):你不知道的建構函式(上)ORMC++函式
- Performanced C++ 經驗規則(2):你不知道的建構函式(中)ORMC++函式
- Performanced C++ 經驗規則(3):你不知道的建構函式(下)ORMC++函式
- C語言的本質(37)——makefile之隱含規則和模式規則C語言模式
- c++ 動態規劃(數塔)C++動態規劃
- 演算法筆記02--歸納法之多項式求值(Horner規則)演算法筆記
- C++程式語言的四個準則C++
- C++設計目標和原則 (轉)C++
- GNU C 規則表示式入門(轉)
- 霍夫檢測圓:霍夫梯度法梯度
- C++與正規表示式入門C++
- 最全面的C/C++編碼規範總結C++
- 淺談C++物理設計:設計原則C++
- C++程式語言的四個基本準則C++
- C++基礎::類設計的幾大原則C++
- 用C#實現不規則窗體C#