js设计杨辉三角
使用递归算法执行效率非常低

因此,我们可以定义两个数组,数组1为上一行数字列表,数组2为下一行数字列表,为代求数组。
假设上一行数字为[1,1],即第二行数字,那么下一行数组的元素就等于上一行相邻两个数字之和,即为2,然后设置数组两端的值为1,这样就可以求出下一行数组,即第三行数字列表。求第四行数组的的值,可以把已经计算出的第三行数组作为上一行数组,第四行数组则为代求的下一行数组,以此类推。
我们可以使用双层循环嵌套结构,外层循环结构遍历高次方的幂数(行数),内层循环每次方的项数(列数)
核心代码如下:
var a1= [1,1]; var a2 = [1,1]; for(var i=2;i<=n;i++){ //从第三行开始遍历,n为幂数 a2[0]=1; //定义下一行数组的第一个元素为1 for(var j=1;j<i-1;j++){//从第二个数字开始,遍历每一行 a2[j] = a1[j-1]+a1[j]; } a2[j]=1;//定义下一行数组的最后一个元素为1 for(var k=0;k<=j;k++){//把下一行的数组值给上一行数组,从而实现交替循环 a1[k] = a2[k]; } }
完成算法设计后,就可以设计输出数表,完整代码如下:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div,p{
text-align: center;
}
span{
display: inline-block;
padding: 4px 3px;
}
</style>
</head>
<body>
<script>
//输出函数
//判断是否为数字
function printYH(v){
if(typeof v=="number"){
var w = 40;
if(n>30){
w = (n-30)+40;
}
//随着输入数字的增大,适当调整span的宽度
var s= '<span style="padding:4px 2px;display:inline-bloke;text-align:center;width:'+w+'px">'+v+'</span>';
document.write(s);
}else {
document.write(v)
}
}
//输入接口
var n = prompt('请输入幂数:',9);//默认值9
n=n-0;
var t1 = new Date();
var a1= [1,1];
var a2 = [1,1];
printYH('<div style="text-align=center;"> ');
printYH(1);
printYH("<br>");
for(var i=2;i<=n;i++){ //从第三行开始
printYH(1);//每一行第一个数字
for(var j=1;j<i-1;j++){//从第二个数字开始,遍历每一行
a2[j] = a1[j-1]+a1[j];
printYH(a2[j]);
}
a2[j]=1;//每一行最后一个数字
for(var k=0;k<=j;k++){//把下一行的数组值给上一行
a1[k] = a2[k];
}
printYH(1);
printYH("<br>");
}
printYH("</div>");
var t2 = new Date();
printYH("<p style='text-align=center;'>耗时为(毫秒):"+(t2-t1)+"</p>");
</script>
</body>
</html>
演示效果:


浙公网安备 33010602011771号