Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 递归,不带全局变量,只为一个参数循环一个_Javascript_Recursion - Fatal编程技术网

Javascript 递归,不带全局变量,只为一个参数循环一个

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') {

我需要帮助完成这项任务。我试过几种方法。我使用了typeof fun.tab===“未定义”。有什么想法吗


修改递归跟随的定义,以便在计算任意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;
            }


    }