Javascript 递归,不带全局变量,只为一个参数循环一个
我需要帮助完成这项任务。我试过几种方法。我使用了typeof fun.tab===“未定义”。有什么想法吗Javascript 递归,不带全局变量,只为一个参数循环一个,javascript,recursion,Javascript,Recursion,我需要帮助完成这项任务。我试过几种方法。我使用了typeof fun.tab===“未定义”。有什么想法吗 修改递归跟随的定义,以便在计算任意k的fun时,最后我这样做;-现在是109876543210,谢谢你的帮助。你是伟大的人类;p var fun = function (arg) { var n = arg; console.log(n); if(typeof this.cache === 'undefined') {
修改递归跟随的定义,以便在计算任意k的fun时,最后我这样做;-现在是109876543210,谢谢你的帮助。你是伟大的人类;p
var fun = function (arg) {
var n = arg;
console.log(n);
if(typeof this.cache === 'undefined') {
this.cache = [];
}
if (typeof this.cache[n - 1] === 'undefined' && typeof this.cache[n - 2] === 'undefined') {
this.cache[n - 1] = arg;
this.cache[n - 2] = arg;
if(arg<=1){
return 1;
} else {
return fun(n-1) + fun(n-2);
}
} else {
return 1;
}
}
除了复制/粘贴之外,你还能做什么吗?不,这是我上次考试的任务。我是Java程序员/伙计,这和不懂javascript无关。这与成为一名程序员有关。更多地学习递归的概念。谷歌。你可以得到答案。做一个好的程序员,而不是一个总是需要邻桌的家伙给他答案的程序员。这里缺少一个结束括号。n和f从未定义过。你是说玩得开心吗?我需要通过考试——这不是怎么回事。你应该自己找到解决办法。提示:使用更多的参数,或者一个具有不同返回类型的本地函数。HM,我故意不提,因为我认为这不是纯粹的功能。引入缓存就是创建一个外部/全局值,即使它不是一个变量,而是一个属性。@Bergi好吧,如果你传递一个缓存对象,而不是对它进行变异,你只需每次创建一个新的,那么一切都是不可变的,它仍然按预期工作。你还有什么想法?@user3604928我很高兴能帮上忙。这并不是我想的那样,我不认为你的函数会产生正确的结果,因为你在缓存arg,而不是计算funn-x,而不是返回缓存的值,你也只是返回1,但我想你走的是对的。@plalx:是的,我想到的是传递一个已经计算过的值的不可变列表。但是,我不再称之为缓存了,而这个答案中的.cache是一个静态的、全局的、可变的对象
var fun = function (arg) {
console.log(arg);
var n = arg;
if (typeof tab === 'undefined') {
var tab = [];
}
if(this in tab) {
return 1;
} else {
tab[this] = this;
if(arg<=1){
return 1;
} else {
return fun(n-1) + fun(n-2);
}
}
}
fun(10);
var fun = function (arg) {
var n = arg;
console.log(n);
if(typeof this.cache === 'undefined') {
this.cache = [];
}
if (typeof this.cache[n - 1] === 'undefined' && typeof this.cache[n - 2] === 'undefined') {
this.cache[n - 1] = arg;
this.cache[n - 2] = arg;
if(arg<=1){
return 1;
} else {
return fun(n-1) + fun(n-2);
}
} else {
return 1;
}
}