JS中常見的演算法

2021-08-05 20:40:43 字數 2347 閱讀 8003

常見演算法

1累加/累積

累加:將一系列的資料加到乙個變數裡面。最後的達到累加的結果

比如:將1到

100的數求累加和。

小球從高處落下,每次返回到原來的一半,求第十次小球落地時小球走過的路程。

var h = 100;

var s = 0;

for(var i=0;i<10;i++)

s = s*2 +100;

累積:將一系列的資料乘積到乙個變數裡面,得到累積的結果。

常見的就是n的階乘

var n =100;

var result = 1;

for(var i=1;i<=n;i++)

一般形式:

累加:v += e;

累積:v *= e;

演算法要點:

(1)初始化

初始化v

累加:v = 0;

累積:v = 1;

e 的初始化 ,如果累加

/積項比較複雜,可能會分解為幾個子項分別初始化,比如計算圓周率的問題,累加項分為符號、分子和分母三個部分。

(2)迴圈的控制條件

一種是固定次數,比如計算彈球距離的問題、計算數列的前20項之和的問題。

次數不固定,而是滿足某個條件:計算圓周率問題要求最後一項的絕對值要小於10-6。

(3)確定累加/積項的變化

比如數列的前20之和,是將當前的分子分母之和作為下一次的分母,當前的分母作為分子。

在比如說求圓周率問題,是將符號取反、分母加2,然後得出下一項。

2迭代迭代法也叫輾轉法

規律:就是可以不斷的用舊的值去得到新的值,直到我們想要得到的結果

遇到了迭代的問題怎麼解決:

(1)找到迭代的變數(舊的值)

(2)確定迭代的關係。

(3)知道想要的結果是什麼(結束迴圈的條件)

1)就是知道最終的結果

2)迴圈的次數

3遞推

解決思路:

找到數學規律,通過公式計算到下一項的值,一直到我們要的結果為止,

/*

* 一般而言,在兔子在出生兩個月後,就有繁殖能力

* 一對兔子每個月能生出一對小兔子來。

* 如果所有兔子都不死,那麼一年以後總共有多少對兔子?

* */

/** 月份 0 1 2 3 4 5 6

* 幼崽 1 1 1 2 3 5 8

* 成年 0 0 0 1 2 3 5

* 總共 1 1 2 3 5 8 13

* */

var month = number(prompt("請輸入月份"));

var rabbit = [1,1];

for(var m=2;m<=month;m++)

alert(rabbit[month]);

遞推分為:順推和逆推。

4窮舉

遇到乙個問題,找不到更好的解決辦法(找不到數學公式或規律)時,使用「最笨」的辦法,利用計算機計算速度快的特點,將所有的可能性全部列出來,並將我們想要得到的結果記錄下來。

例如:百錢買白雞

/*

* 百雞問題:

* 雞翁一值錢五,雞母一值錢三,雞鄒三值錢一。百錢買百雞,問雞翁、雞母和雞鄒各幾何。

* */

for(var cock=0; cock<=20;cock++)

}}

窮舉方法的特點是演算法簡單,相應的程式簡單,但計算量往往很大。但計算機的優勢就是運算速度快,所以此演算法可以揚長避短,往往可以取得不錯的效果。

案例:有乙個三位數,個數數字比百位數字大,而百位數字又比十位數字大並且各位數字之和等於各位數字相乘之積,求此三位數。

5遞迴

所謂遞迴,就是在函式內部又去呼叫自己。

列如:求階乘問題,在fact函式內部又去呼叫

fact

函式了。

/*

* 函式功能:計算n的階乘

* */

function fact(n)

return n*fact(n-1);

}alert(fact(5));

遞迴演算法如果按照常規思路去理解是非常複雜的,函式呼叫一層一層巢狀呼叫,然後又一層一層返回。

遞迴實際上就是將規模為n的問題降階為

n-1的問題進行求解。也就是去找n和

n-1之間的關係。

js中常見的錯誤

1.錯誤分為兩種 1 錯誤 這種錯誤瀏覽器會報錯,可以根據錯誤型別去排錯 2 邏輯錯誤 這種錯誤瀏覽器不會報錯,但是可以使用斷點進行除錯排錯 2.錯誤型別 2.1語法錯誤 即寫的 不符合js編碼規則 報錯為 uncaught syntaxerror 資訊提示 我們可以根據後面的資訊提示去修改錯誤,當...

magento 中常見的js衝突

magento內建使用的prototype庫,和jquery的使用有一定的衝突,解決起來還是相當簡單的。在網上有很多文章介紹這個東西,詳細到說明了jquery和prototype庫的引入前後順序,最開始看的時候讓我頭暈而且很難記得,每次寫的時候還要翻下文章。當然不是說那些文章不夠好,只是個人感覺有點...

js中常見的迴圈遍歷

1.for迴圈,可以break結束迴圈。arr 1 2,3 4,5 6 for let i 0 i arr.length i 2.for.in迴圈,用於物件迴圈遍歷,可獲取物件的對應鍵值 注意 for in迴圈物件的所有列舉屬性,需再使用hasownproperty 方法來忽略繼承屬性,即在迴圈內部...