永发信息网

js递归时有多个结束条件的实现方法

答案:2  悬赏:70  手机版
解决时间 2021-11-09 19:02
  • 提问者网友:不爱我么
  • 2021-11-08 20:28
js递归时有多个结束条件的实现方法
最佳答案
  • 五星知识达人网友:洒脱疯子
  • 2021-11-08 21:51
    表示当前节点递归完了
    1

       _.isEmpty(nodes)
       表示所有节点递归完了
    想了半天,除了在nexts外层套一个循环外,没能写出很好的递归方法。
    希望各路大神能给一个思路,如果能给出一个多条件递归时的思路总结,说明一下这种问题应如果分解,就再好不过了。
    写了一个示例,里面包含了执行环境和用到的工具函数,可以在这里实验。
全部回答
  • 1楼网友:白昼之月
  • 2021-11-08 22:13

// 数组中表示前一种语言对后一种语言有影响var influences = [
['Lisp', 'Smalltalk'],
['Lisp', 'Scheme'],
['Smalltalk', 'Self'],
['Scheme', 'JavaScript'],
['Scheme', 'Lua'],
['Self', 'Lua'],
['Self', 'JavaScript']];// 获得受某种语言直接影响的语言的列表function nexts(graph, node) {  if (_.isEmpty(graph)) return [];  var pair = _.first(graph);  var from = _.first(pair);  var to   = second(pair);  var more = _.rest(graph);  if (_.isEqual(node, from))    return construct(to, nexts(more, node));  else
return nexts(more, node);
}

nexts(influences, 'Lisp');// 输出: ["Smalltalk", "Schema"];

后面又给了一个练习题,让nexts能够遍历多个节点。我理解这个练习题的要求是:
参数:influences, nodes (例如['Lisp', 'Self'])
输出:

{
Lisp: ["Smalltalk", "Schema"],
Self: ["Lua", "JavaScript"]

感觉这个递归有两个结束条件:

  • _.isEmpty(graph) 表示当前节点递归完了

  • _.isEmpty(nodes) 表示所有节点递归完了

  • 想了半天,除了在nexts外层套一个循环外,没能写出很好的递归方法。

    希望各路大神能给一个思路,如果能给出一个多条件递归时的思路总结,说明一下这种问题应如果分解,就再好不过了。

    写了一个示例,里面包含了执行环境和用到的工具函数,可以在这里实验。

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯