从函数的父级开始结束递归函数- NodeJS

g52tjvyc  于 2023-05-17  发布在  Node.js
关注(0)|答案(1)|浏览(97)

简单但具有挑战性的问题;我正在尝试启用服务器端脚本评估,我有一些问题(已经讨论了基本问题)。
我不能计算递归,因为我不知道什么是递归。我只能访问递归的父函数和子函数。我不想破坏这个函数但我需要记住管理费用和费率限制。
任何技术或代码解决方案将不胜感激。如果检查注入脚本中的递归函数,然后在循环中中断它们是唯一的方法,请告诉我。

h6my8fg2

h6my8fg21#

我想最好的方法就是搜索递归函数;我做了一个父子递归函数解析器,它处理传递给函数的数据,并在设定的时间内迭代。

function recurser(f, fargs, c, p, i, n, cb, x, y, z){
    i++;
    if(fargs[8] > n){
        console.log('recursion limit reached');
        console.log(x, y);
        return [x, y];
    }else{
        fargs[8] = fargs[8] + 1;
        cb(f(fargs[0], fargs[1], fargs[2], fargs[3], fargs[4], fargs[5], fargs[6], fargs[7], fargs[8], fargs[9], fargs[10], fargs[11]));
    }
}
function fn(cb, parentx, parentx_args, childx, childx_args, x, y, r, i, rlimit, next, z){
    if(r == undefined){
        r = recurser;
        i = 0;
        rlimit = 10;
    }
    if(x == ''){
        x = [];
    }
    if(y == ''){
        y = [];
    }
    if(typeof z == 'undefined'){
        strz = parentx.toString().substr(parentx.toString().indexOf('function ') + 9);
        strx = strz.substring(0, strz.indexOf('('));
        str = strz.substr(strz.indexOf('('), strz.indexOf('}'));
        if(str.indexOf(strx) > -1){
            next('No recursive functions allowed');     
        }else{
            for(j = 0; j < rlimit; j++){
                x.push(parentx(parentx_args, j));
                if(childx == undefined){
                    y.push(childx(childx_args, parentx_args, j));
                }
            }
            next([x, y])
        }
    }else{
        z = parentx;
        x.push(parentx(parentx_args, i));
        if(childx != null){
            y.push(childx(childx_args, parentx_args, i));
        }
        if(i == rlimit){
            next([x, y]);
        }else{
            r(fn, [(d) => { cb(d); }, parentx, parentx_args, childx, childx_args, x, y, r, i, rlimit, next, z], childx_args, parentx_args, i, rlimit, (d) => {  }, x, y, z)
        }
    }
}
function hello_world(args, i){
    console.log('hello world - ' + args[0] + ' - ' + i + 'nth');
    return i + ' hai';
}
function bye_world(args, pargs, i){
    console.log('bye world - ' + args[0] + ' -' + i + 'nth');
    return i + ' bai';
}
fn('', hello_world, ['Rah1337'], bye_world, ['Rah1337'], [], [], recurser, 0, 10, (d) => {
    console.log('end start', d)
});
function loop(vars, i){
    return Number(i) + 1;
}
fn('', loop, [1, 0], '', [], [], [], recurser, 0, 10, (d) => {
    console.log(d)
});
function recurse(vars, i){
    recurse(vars, i)
}
fn('', recurse, [1, 0], '', [], [], [], recurser, 0, 10, (d) => {
    console.log(d)
});

相关问题