這次帶給大家JS常用演算法實例匯總,使用JS常用演算法的注意事項有哪些,下面就是實戰案例,一起來看一下。
累加與累積
累加:將一連串的資料加到一個變數裡面。最後的得到累加的結果
例如:將1到100的數求累加和
小球從高處落下,每次回到原來一半,求第十次小球落地時小球走過的路程
<script> var h=100; var s=0; for(var i=0;i<10;i++){ h=h/2; s+=h; } s=s*2+100; </script>
累積:將一連串的資料乘積到一個變數裡面,得到累積的結果。
常見的就是n的階乘
var n=100; var result= 1; for(var i=1;i<p style="text-align: left;">一般形式:</p><p style="text-align: left;"> 累加:V =e;</p><p style="text-align: left;">累積:v*=e;</p> <p style="text-align: left;">V代表累加和累積,e代表累加/累積項目</p><p style="text-align: left;"><strong>演算法要點:</strong></p><p style="text-align: left;">(1)初始化</p><p style="text-align: left;">初始化v和e</p><p style="text-align: left;">累加:v = 0;</p><p style="text-align: left;">累積:v = 1;</p><p style="text-align: left;">e的初始化,如果累加/積項比較複雜,可能會分解為幾個子項分別初始化,例如計算圓周率的問題,累計項分解為符號、分子、分母三部分。 </p><p style="text-align: left;">(2)循環的控制條件</p><p style="text-align: left;">一種是固定的次數,例如計算彈跳距離的問題,計算數列前20項總和的問題,</p><p style="text-align: left;">次數不固定,而是要滿足某個條件:計算圓周率問題要求最後一項的絕對值,要小於10-6。 </p><p style="text-align: left;">(3)確定累加/積項的變化</p><p style="text-align: left;">例如數列的前20項之和,是將當前的分子分母之和作為下一次的分母,當前的分母作為分子。 </p><p style="text-align: left;">再例如求圓周率問題,是將符號取反、分母加2,然後的出下一項。 </p><p style="text-align: left;"><span style="font-size: medium"><strong>迭代</strong></span></p><p style="text-align: left;"><strong>迭代法也就是輾轉法</strong></p><p style="text-align: left;">規律:就是可以不斷地用舊的值得到新的值,直到我們想要的得到的結果。 </p><p style="text-align: left;">遇到了迭代的問題怎麼解決</p><p style="text-align: left;">1. 找到迭代的變數(舊的值)</p><p style="text-align: left;">2. 確定迭代的關係</p><p style="text-align: left;">3.知道想要的結果是什麼(結束迴圈的條件)</p><p style="text-align: left;">(1)就是知道最終結果</p><p style="text-align: left;">(2)迴圈的次數</p><pre class="brush:php;toolbar:false"><script> /* * 1.接受用户输入的俩个数 * 2.一个函数的到最大公约数 * 3.打印这个最大公约数*/ var num1 = Number(prompt("请输入一个数")); var num2 = Number(prompt("请输入一个数")); var result = GCD(num1,num2); alert(result); /* * 函数的功能:得到最大公约数 * 函数名:GCD * 函数的参数:俩个整数 * 返回值:最大公约数*/ /* * 如果num1<num2则交换,确保num1是交大的 * 计算余数 * 当num1(除数),对num2(被除数)的余数不为0,重复一下步骤 * num2=>num1, * 余数=>num2 * 重新计算余数 * 最终的到最大公约数,也就是num2的值*/ function GCD(num1,num2){ /*return0;*/ if(num1<num2){ var t = num1; num1=num2; num2 = t; } var remainder = num1%num2; while(remainder!= 0){ num1=num2; num2= remainder; remainder=num1%num2; } returnnum2; } </script>
遞推
找到數學法則:透過公式計算到下一項的值,一直到我們要的結果為止
例如:兔子產子:經由前倆項得到下一項
<script> /* * 一般而言,兔子在出生俩个月后,就有繁殖能力 * 一对兔子每个月能生出一对小兔子来 * 如果所有的兔子都不死,那么一年以后总共有多少对兔子*/ /* * 月份 0 1 2 3 4 5 6 * 幼崽 1 1 1 2 3 5 8 * 成年 0 0 1 1 2 3 5 * 总共 1 1 2 3 5 8 13 * */ /* * 接收用户输入的月份 * 计算兔子的对数 * (1)如果经过的月份<2那么兔子的对数为1 * (2)否则用初始的兔子的对数 加上 第一个月的对数为 * 第二个月兔子的个数(an = an-1 +an-2) * 反复使用这个公式,计算出下个月兔子的个数一直到用户输入的月份为止 * 打印的兔子的对数 * */ /* var month = Number(prompt("输入月份")); var sum ; var an =1; var an_1=1; var an_2; if(month < 2){ sum=1; }else{ sum=2; for(var i=1; i<month; i++){ sum= an +an_1; an_1 =an; an = sum; } } alert(sum);*/ /* * 思路2*/ var month = Number(prompt("输入月份")); var rabbit = [1,1]; for(var m=2;m<=month;m++){ rabbit[m]=rabbit[m-1]+rabbit[m-2]; } alert(rabbit[month]); </script>
遞推分為順推和逆推。
窮舉
遇到一個問題,找不到更好的解決方法,(找不到數學公式或規律)時,使用「最笨」的辦法,利用計算機計算速度快的特點,將所有可能性全部列出來
並將我們想要得到的結果記錄下來
<script> /* * 公鸡一值钱5,鸡母一值钱三,鸡仔三值钱一 * 百钱买百鸡,问公鸡,鸡母、鸡仔各几何? * x y z * x + y + z = 100 * x*5 + y * 3 + z/3 = 100*/ for(var cock=0;cock<=20;cock++){ for(var hen=0;hen<=33;hen++){ var chihen=100-cock-hen; if(100== cock*5+ hen*3+ chihen/3){ document.write("公鸡一共:"+cock+"鸡母一共:"+hen+"小鸡一共:"+chihen+"<br>") } } } </script>
窮舉方法的特點:是演算法簡單,對應的程式也簡單,但是計算量往往很大。但是計算機的優點就是運算速度快,所以此演算法可以揚長避短,往往可以達到不錯的效果。
案例:有一個三位數,個位數字比百位數字大,而百位數字又比十位數字大,並且各位數字之和等於各位數字相乘之積,求此三位數
遞迴
所謂遞歸,就是在函數內部又去呼叫自己。
例如,求階乘問題,在fact函數內部又去調用fact函數了
<script> /*计算n的阶乘*/ function fact(n){ if(1== n){ return 1 } return n*fact(n-1); } alert(fact(5)); </script>
遞歸演算法如果按照常規思路去理解是非常複雜的,函數調用一層一層嵌套調用,然後又一層一層返回,不妨換個思路去理解遞歸。
遞迴其實就是將規模為n的問題降價為n-1的問題來解。也就是去找n和n-1的關係。
相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!
推薦閱讀:
VeeValidate在vue專案裡表單校驗使用案例程式碼分析
以上是JS常用演算法實例匯總的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。

Python更適合初學者,學習曲線平緩,語法簡潔;JavaScript適合前端開發,學習曲線較陡,語法靈活。 1.Python語法直觀,適用於數據科學和後端開發。 2.JavaScript靈活,廣泛用於前端和服務器端編程。

Python和JavaScript在社區、庫和資源方面的對比各有優劣。 1)Python社區友好,適合初學者,但前端開發資源不如JavaScript豐富。 2)Python在數據科學和機器學習庫方面強大,JavaScript則在前端開發庫和框架上更勝一籌。 3)兩者的學習資源都豐富,但Python適合從官方文檔開始,JavaScript則以MDNWebDocs為佳。選擇應基於項目需求和個人興趣。

從C/C 轉向JavaScript需要適應動態類型、垃圾回收和異步編程等特點。 1)C/C 是靜態類型語言,需手動管理內存,而JavaScript是動態類型,垃圾回收自動處理。 2)C/C 需編譯成機器碼,JavaScript則為解釋型語言。 3)JavaScript引入閉包、原型鍊和Promise等概念,增強了靈活性和異步編程能力。

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

記事本++7.3.1
好用且免費的程式碼編輯器

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 Linux新版
SublimeText3 Linux最新版