js递归时有多个结束条件的实现方法
- 提问者网友:不爱我么
- 2021-11-08 20:28
- 五星知识达人网友:洒脱疯子
- 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外层套一个循环外,没能写出很好的递归方法。
希望各路大神能给一个思路,如果能给出一个多条件递归时的思路总结,说明一下这种问题应如果分解,就再好不过了。
写了一个示例,里面包含了执行环境和用到的工具函数,可以在这里实验。