简单但具有挑战性的问题;我正在尝试启用服务器端脚本评估,我有一些问题(已经讨论了基本问题)。我不能计算递归,因为我不知道什么是递归。我只能访问递归的父函数和子函数。我不想破坏这个函数但我需要记住管理费用和费率限制。任何技术或代码解决方案将不胜感激。如果检查注入脚本中的递归函数,然后在循环中中断它们是唯一的方法,请告诉我。
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) });
1条答案
按热度按时间h6my8fg21#
我想最好的方法就是搜索递归函数;我做了一个父子递归函数解析器,它处理传递给函数的数据,并在设定的时间内迭代。