Typescript 为什么我的算法不使用线性内存空间?
我现在写这个滚动等式检查算法只是为了好玩,主要目标是以声明的方式和函数式的方式来做。不知何故,我的算法使用了非线性内存空间。事实上,由于RangeError,它无法运行:超出了最大调用堆栈大小。很高兴得到您的帮助:Typescript 为什么我的算法不使用线性内存空间?,typescript,algorithm,recursion,functional-programming,Typescript,Algorithm,Recursion,Functional Programming,我现在写这个滚动等式检查算法只是为了好玩,主要目标是以声明的方式和函数式的方式来做。不知何故,我的算法使用了非线性内存空间。事实上,由于RangeError,它无法运行:超出了最大调用堆栈大小。很高兴得到您的帮助: const roll = (a: number): ((b: number) => number[]) => (b: number): number[] => { let a1 = a * Math.floor(Math.random() * 6 + 1);
const roll = (a: number): ((b: number) => number[]) => (b: number): number[] => {
let a1 = a * Math.floor(Math.random() * 6 + 1);
let b1 = b * Math.floor(Math.random() * 6 + 1);
return [a1, b1]
};
const compare = () => {
let counter: number = 0;
let totalcounter: number = 10000;
const compareStep = (a: number[]) => {
(() => (a[0] === 1 || a[1] === 1) && counter++)();
totalcounter -= 1;
(totalcounter === 0) ? console.log(counter / 10000) : compareStep(roll(1)(1));
};
return compareStep(roll(1)(1))
}
let Compare = compare();
Compare
当函数递归调用自身时,它需要提供更接近基本情况的参数。但是在每次对
compareStep()
的递归调用中,您都会生成一组新的卷,我的totalCounter
减量不是很有帮助吗?您允许10K次递归,这可能太多了。您想知道需要多少次尝试才能获得相同的卷吗?啊,当您获得匹配时,您不会停止。你在计算在10公里重复赛中有多少场比赛。除非语言具有尾部递归优化,否则不能使用递归作为迭代的一般替代。