首页 > 编程语言 > 详细

[Javascript] Intro to Recursion - Detecting an Infinite Loop

时间:2015-12-30 06:57:30      阅读:213      评论:0      收藏:0      [点我收藏+]

When using recursion, you must be mindful of the dreaded infinite loop. Using the recursive function that we’ve built up over the previous lessons, we look at how a simple duplicated configuration item could cause chaos for our program as it has no context of which items it has previously seen. We fix this problem by introducing a parents array, which can keep track of which top-level commands have already been accessed.

 

Previous:

let input, config;

input = [‘dist‘];

config = {
  "dist": ["build", "deploy"],
  "build": [‘js‘, ‘css‘, ‘vender‘],
  "js": [‘babel‘, ‘ng-Annotate‘, "uglify"],
  "css": ["sass", "css-min"]
};

var res = getTasks(config, input, []);

function getTasks(config, input, initial){
  
  return input.reduce((prev, next)=>{
    if(config[next]){
      return getTasks(config ,config[next], prev);
    }else{
      return prev.concat(next);
    }
  }, initial);
};

console.log(res);

 

----------

Code:

let input, config;

input = [‘dist‘];

config = {
  "dist": ["build", "deploy"],
  "build": [‘js‘, ‘css‘, ‘vender‘, ‘dist‘],
  "js": [‘babel‘, ‘ng-Annotate‘, "uglify"],
  "css": ["sass", "css-min"]
};

var res = getTasks(config, input);

function getTasks(config, input, initial, parent){
  
  initial = initial || [];
  parent = parent || [];
  
  return input.reduce((prev, next)=>{
    
    if(parent.indexOf(next) > -1){
console.log(‘infinite loop detected!‘);
return prev; } if(config[next]){ return getTasks(config ,config[next], prev, parent.concat(next)); }else{ return prev.concat(next); } }, initial); }; console.log(res);

 

[Javascript] Intro to Recursion - Detecting an Infinite Loop

原文:http://www.cnblogs.com/Answer1215/p/5087602.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!