當前位置:首頁 » 網頁前端 » 斐波那契數列腳本
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

斐波那契數列腳本

發布時間: 2022-04-01 03:28:19

Ⅰ JS操作大量Dom數據時,假死現象

1:JS中大量的DOM操作也會導致事件響應緩慢甚至真正卡死瀏覽器,如在IE6下一次插入大量的HTML。而如果真的彈出了「腳本運行時間過長「的提示框則說明你的JS腳本肯定有死循環或者進行過深的遞歸操作了。

2:這時候需要對腳本進行優化,其步驟如下:

第一步,優化循環,循環體中包含太多的操作和循環的次數過多都會導致循環執行時間過長,並直接導致鎖死瀏覽器。如果循環之後沒有其他操作,每次循環只處理一個數值,而且不依賴於上一次循環的結果則可以對循環進行拆解,看下面的chunk的函數:

function chunk(array, process, context){
setTimeout(function(){
var item = array.shift();
process.call(context, item);
if(array.length >0){
setTimeout(arguments.callee,100);
}),100);
}
chunk()函數的用途就是將一個數組分成小塊處理,它接受三個參數:要處理的數組,處理函數以及可選的上下文環境。每次函數都會將數組中第一個對象取出交給process函數處理,如果數組中還有對象沒有被處理則啟動下一個timer,直到數組處理完。這樣可保證腳本不會長時間佔用處理機,使瀏覽器出一個高響應的流暢狀態。
其實看來,藉助JS強大的閉包機制任何循環都是可拆分的,下面的版本增加了callback機制,使可再循環處理完畢之後進行其他的操作。

function chunk(array,process,cbfun){
var i=0,len = array.length; //這里要注意在執行過程中數組最好是不變的
setTimeout(function(){
process( array[i], i++); //循環體要做的操作
if( i < len ){
setTimeout(arguments.callee,100)
}else{
cbfun() //循環結束之後要做的操作
}
}
}

第二步,優化函數,如果函數體內有太多不相干但又要一起執行的操作則可以進行拆分,考慮下面的函數:

function dosomething(){
dosomething1();
dosomething2();
}
dosomething1和dosomething2互不相干,執行沒有先後次序,可用前面提到的chunk函數進行拆分:

function dosomething(){
chunk([dosomething1,dosomething2],function(item){item();})
}
或者直接交給瀏覽器去調度

function dosome(){
setTimeout(dosomething1,0);
setTimeout(dosomething2,0);
}

第三步,優化遞歸操作,函數遞歸雖然簡單直接但是過深的遞歸操作不但影響性能而且稍不注意就會導致瀏覽器彈出腳本失控對話框,必須小心處理。
看以下斐波那契數列的遞歸演算法:

function fibonacci(n){
return n <2? n: fibonacci(n -1)+ fibonacci(n -2);
};
fibonacci(40)這條語句將重復調用自身331160280次,在瀏覽器中執行必然導致腳本失控,而採用下面的演算法則只需要調用40次

fibonacci =function(n){
var memo ={0:0,1:0}; //計算結果緩存
var shell =function(n){
var result = memo[n];
if(typeof result !='number') //如果值沒有被計算則進行計算
memo[n]= shell(n-1)+ shell(n -2)
return memo[n];
}
return shell(n);
}
這項技術被稱為memoization,他的原理很簡單就是同樣的結果沒必要計算兩次。另一種消除遞歸的辦法就是利用迭代,遞歸和迭代經常會被作為互相彌補的方法。

第四步,減少DOM操作,DOM操作的代價是相當昂貴的,大多數DOM操作都會觸發瀏覽器的迴流(reflow)操作。例如添加刪除節點,修改元素樣式,獲取需要經過計算的元素樣式等。我們要做的就是盡量少的觸發迴流操作。

el.style.width ='300px' el.style.height ='300px' el.style.backgroundColor ='red'
上面的操作會觸發瀏覽器的三次迴流操作,再看下面的方式:

el.className ='newStyle'
通過設置改元素的className一次設置多個樣式屬性,將樣式寫再CSS文件中,只觸發一次迴流,達到了同樣是效果而且效率更高。因為瀏覽器最擅長的就是根據class設置樣式。
還有很多可以減少DOM操作的方法,在此就不多說了,但是一個基本的原則就是讓瀏覽器去做它自己擅長的事情,例如通過class來改變元素的屬性。
相信經過上面的優化的過程必定可以大大提高用戶體驗,不會出現瀏覽器被鎖死和彈出腳本失控的對話框,使你的瀏覽器從繁重的任務中解放出來。需要指出的是上面這些優化並不是必須的,只有當一段腳本的執行時間真的影響到了用戶體驗才需要進行。雖然讓用戶覺得腳本的執行變快了,但其實完成同一個操作的時間可能被延長了,這些技術只是讓瀏覽器處於一個快速響應的狀態,使瀏覽更流暢。

Ⅱ 若斐波那契數列的第1,2項都是1,編寫VBScript腳本求出第30項的數值並輸出.

int result = 0;
int[] arr = new int[30];
for(int i = 0; i<30; i++){
if(i < 2)

arr[i] = 1;

else

arr[i] = arr[i - 1] + arr[i - 2];

}
result = arr[29];

Ⅲ 如何編寫一個shell腳本,求費波納奇數列的前10項及總和

shell腳本。首先它是一個腳本,並不能作為正式的編程語言。因為是跑在linux的shell中,所以叫shell腳本。說白了,shell腳本就是一些命令的集合。舉個例子,我想實現這樣的操作:
1)進入到/tmp/目錄;
2)列出當前目錄中所有的文件名;
3)把所有當前的文件拷貝到/root/目錄下;
4)刪除當前目錄下所有的文件。簡單的4步在shell窗口中需要你敲4次命令,按4次回車。這樣是不是很麻煩?當然這4步操作非常簡單,如果是更加復雜的命令設置需要幾十次操作呢?那樣的話一次一次敲鍵盤會很麻煩。所以不妨把所有的操作都記錄到一個文檔中,然後去調用文檔中的命令,這樣一步操作就可以完成。其實這個文檔呢就是shell腳本了,只是這個shell腳本有它特殊的格式。
Shell腳本能幫助我們很方便的去管理伺服器,因為我們可以指定一個任務計劃定時去執行某一個shell腳本實現我們想要需求。這對於linux系統管理員來說是一件非常值得自豪的事情。現在的139郵箱很好用,發郵件的同時還可以發一條郵件通知的簡訊給用戶,利用這點,我們就可以在我們的linux伺服器上部署監控的shell腳本,比如網卡流量有異常了或者伺服器web伺服器停止了就可以發一封郵件給管理員,同時發送給管理員一個報警簡訊這樣可以讓我們及時的知道伺服器出問題了。
有一個問題需要約定一下,凡是自定義的腳本建議放到/usr/local/sbin/目錄下,這樣做的目的是,一來可以更好的管理文檔;二來以後接管你的管理員都知道自定義腳本放在哪裡,方便維護。

Ⅳ 編寫一個Shell腳本,顯示Fibonacci數列的前10項。例如: 1,1,2,3,5,8,13,21...

Fibonacci其實就是不斷求和,前兩個數的和形成第三個數。
為方便說明,假設兩個變數A和B,A+B=C,C就是和。

#!/bin/sh
first=1; echo 「$first」 #列印第一個數A=1
second=1; echo –n 「,$second」 #接著不換行列印第二個數B=1,以逗號分隔
sum=`expr $first + $second` #計算前兩個數的和C
i=1 #設置一個變數用於循環計數
while [ $i –le 8 ] #變數小於等於8就一直循環(加前面兩個數共10個)
do
temp=`expr $first + $second` #計算前兩個數的和C
echo -n 「,$temp」 #不換行列印C,以逗號分隔
first=$second #B作為A
second=$temp #C作為B
sum=`expr $sum + $second` #繼續計算新的和C
i=`expr $i + 1 ` #計數加1
done

Ⅳ Linux題 急 ..

樓主這些都是常見問題,還不如自己網路搜一下。雖然除了最後2個沒寫過,其他都弄過,但是每次需要也是網路的

Ⅵ while語句編寫fibonacci數列程序

#include<stdio.h>
#define N 20
int Fibonacci(int n)
{
if(n == 1 || n==2)
return 1;
else
return Fibonacci(n-1)+Fibonacci(n-2);
}
void main()
{
int i = 0;
for(i=1;i<=N;i++)
{
printf("%5d",Fibonacci(i));
if(i%5 == 0)
printf("\n");
}
printf("\n");
}
只要修改宏定義N的值,就可以輸出斐波那契數列的前N項。

Ⅶ 斐波那契數列是一個數列,滿足其前兩項為0和1,其他項為其前兩項的和,用腳本文件寫一個MATALAB

a(1)=0;a(2)=1:for i=3:20
a(i)=a(i-1)+a(i-2);
end
a

Ⅷ 生活中計算思維應用的典型案例五則。

生活中的計算,包括等分除法和包含除法。
把12個鋼鏰平均分成4份,每份得3個鋼鏰,這樣把一些物品平均分成幾份,求每份是多少,可以用除法表示。
把一些物品按照每幾個一份分,求能分成多少份,也可以用除法表示。這種除法就是包含除法。
希望我能幫助你解疑釋惑。

Ⅸ python有哪些腳本

Python常用的30個腳本:

1、冒泡排序

2、計算x的n次方的方法

3、計算a*a + b*b + c*c + ……

4、計算階乘 n!

5、列出當前目錄下的所有文件和目錄名

6、把一個list中所有的字元串變成小寫:

7、輸出某個路徑下的所有文件和文件夾的路徑

8、輸出某個路徑及其子目錄下的所有文件路徑


9、輸出某個路徑及其子目錄下所有以.html為後綴的文件

10、把原字典的鍵值對顛倒並生產新的字典

相關推薦:《Python教程》

11、列印九九乘法表

通過指定end參數的值,可以取消在末尾輸出回車符,實現不換行。

12、替換列表中所有的3為3a

13、列印每個名字

** 善於使用 rang() ,會使問題變得簡單

14、合並去重

15、隨機生成驗證碼的兩種方式

16、計算平方根

17、判斷字元串是否只由數字組成

18、判斷奇偶數

19、判斷閏年

20、獲取最大值

21、斐波那契數列

斐波那契數列指的是這樣一個數列 0, 1, 1, 2, 3, 5, 8, 13;特別指出:第0項是0,第1項是第一個1。從第三項開始,每一項都等於前兩項之和。

22、十進制轉二進制、八進制、十六進制

23、最大公約數

23、最小公倍數

24、簡單計算器

25、生成日歷

26、文件IO

27、字元串判斷

28、字元串大小寫轉換

29、計算每個月天數

30、獲取昨天的日期

Ⅹ 編寫一個shell腳本,求斐波那契數列(1 1 2 3 5 8 13 21 ........)的前10項及其

#!/bin/bash

i=1
j=0

for (( k=0; k<10; k++ ))
do
echo -n "$i "
let m=i
let i+=j
let j=m
done
echo ""