当前位置:首页 » 网页前端 » 斐波那契数列脚本
扩展阅读
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 ""