如何不用递归计算阿克曼函数?
递归实现:
def ack(n, m):
if n == 0:
return m + 1
if m == 0:
return ack(n - 1, 1)
return ack(n - 1, ack(n, m - 1))
我读了一篇关于梳排序的文章https://thecode.media/comb-sort/,测试了代码,结果发现当因子值大于1.31时,代码开始工作不正确,尽管文章没有对此有何评论。为什么这种情况会从这个值开始发生,而不是从 1.2 或 1.4 开始发生?
// исходный массив
var arr = [];
for(let i = 0;i < 1000;i++){
arr.push(Math.random());
}
// получаем длину массива
const l = arr.length;
// оптимальное число для вычисления шага сравнения
const factor = 1.32;
// получаем точный шаг сравнения
let gapFactor = l / factor;
// пока шаг больше единицы
while (gapFactor > 1) {
// округляем шаг до целого
const gap = Math.round(gapFactor);
// и организуем цикл как в пузырьковой сортировке
for (let i = 0, j = gap; j < l; i++, j++) {
// если сначала идёт большое число
if (arr[i] > arr[j]) {
// меняем их местами
[arr[i], arr[j]] = [arr[j], arr[i]];
}
// выводим текущее состояние массива в консоль
// это необязательный шаг, он здесь для наглядности
//console.log(arr);
}
// в конце цикла рассчитываем новый шаг
gapFactor = gapFactor / factor;
}
for(let i = 0;i < arr.length - 1;i++){
if(arr[i + 1] < arr[i]){
console.log('Массив неправильно отсортирован! ' + i);
}
}
有一个班MyClass()
。
对于 getter 有一个装饰器@property
,但对于 setter 有一个@prop_name.setter
.
为什么会这样呢?
有一个名为 example.com 的网站。我需要为我替换他的 script/script.js:当网站加载脚本时,它会获取我的版本。