关于函数式编程的逻辑
来源:2-3 函数式编程例二
慕移动9586716
2021-07-12 10:39:35
1、老师,这段代码运行的逻辑是怎样的?
2、nodeCount++是每一次递归调用时进行自增嘛?
3、nodeCount++为什么要放在TraverseFunc()的参数里面?
1回答
ccmouse
2021-07-16
TraverseFunc这个函数是一个递归函数,我这里也贴一下
这个TraverseFunc函数会递归的调用,并最终访问到树中每一个节点,f只是这个TraverseFunc的一个参数,函数式编程中,函数也是一等公民,也可以作为参数传递。对于每个节点,它会对其再调用f(node)。
我们使用TraverseFunc的方法是给出这样一个参数:
func(node *tree.Node) {
nodeCount++
}
注意这个函数我们在调用root.TraverseFunc的时候并没有被调用,整个函数式一个参数,作为名字f,传进了TraverseFunc。什么时候调用呢,运行到19行f(node)的时候。而且,由于TraverseFunc的递归调用,f被调用了许多次,每个node各一次。
因此最终的nodeCount也就是节点数量。
相似问题