javascript的遞歸實現迴轉數

爲了代碼的簡潔性,這裏不使用嚴格模式了

function rotateRect(index) {
    var arr = [], f = 0;
    for (var i = 0; i < index; ++i) {
        arr.push([]);
        arr[i].length = index;
    }
    return index & 1 ? (function (f, arr, index) {
        if (index <= f)
            return arr;
        for (var j = 0; j < index - f; j++)
            arr[index - 1][index - 1 - j] = (index - f) * (index - f) - j;
        for (var i = 0; i < index - f; i++)
            arr[index - 1 - i][f] = (index - f) * (index - f) - (index - f) + 1 - i;
        for (j = f; j < index; j++)
            arr[f][j] = (index - f) * (index - f) - ((index - f) - 1) * 2 - j + f;
        for (i = f; i < index - 1; i++)
            arr[i][index - 1] = (index - f) * (index - f) - ((index - f) - 1) * 3 - i + f;
        return arguments.callee(f + 1, arr, index - 1);
    })(f, arr, index) : (function (f, arr, index) {
        if (index <= f)
            return arr;
        for (var j = f; j < index; j++)
            arr[f][j] = (index - f) * (index - f) - j + f;
        for (var i = f; i < index; i++)
            arr[i][index - 1] = (index - f) * (index - f) - (index - f) + 1 - i + f;
        for (j = 0; j < index - f; j++)
            arr[index - 1][index - 1 - j] = (index - f) * (index - f) - ((index - f) - 1) * 2 - j;
        for (i = 0; i < index - 1 - f; i++)
            arr[index - 1 - i][f] = (index - f) * (index - f) - ((index - f) - 1) * 3 - i;
        return arguments.callee(f + 1, arr, index - 1);
    })(f, arr, index)
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章