functionspiral(n) { //异常处理 if (!n || typeof n !== "number" || n < 1) { return; } //特殊情况 n === 1 直接输出 if (n === 1) { console.log("1"); return; } //a为结果数组,m为循环圈数 var a = [], m = Math.floor(n / 2); //i、j分别为横向、纵向循环变量,k为圈数循环变量,base为当前打印数 var i = 0, j = 0, k = 0, base = 1; //初始化二维数组 for (var i = 0; i < n; i++) { a[i] = []; } //套路开始 for (var k = 0; k < m; k++) { //向右,i++; i = k, j=k 将起点置为该圈的左上角;每圈的每个方向有n-2*k-1个数 for (i = k, j = k; i < n - k - 1; i++) { a[i][j] = base++; } //向下,j++ for (j = k; j < n - k - 1; j++) { a[i][j] = base++; } //向左,i-- for (i = n - k - 1; i > k; i--) { a[i][j] = base++; } //向上,j-- for (j = n - k - 1; j > k; j--) { a[i][j] = base++; } //若n为奇数,赋值中心点 if (n % 2) { a[m][m] = n * n; } } //打印数组 //console.log(a); //将数组一行输出 var str = ""; for (i = 0; i < n; i++) { for (j = 0; j < n; j++) { str += a[j][i]; if (i === n - 1 && j === n - 1) { break; } str += " "; } } console.log(str); } //测试 spiral(4);