关于函数式编程的逻辑

来源:2-3 函数式编程例二

慕移动9586716

2021-07-12 10:39:35

1、老师,这段代码运行的逻辑是怎样的?

2、nodeCount++是每一次递归调用时进行自增嘛?

3、nodeCount++为什么要放在TraverseFunc()的参数里面?

http://img.mukewang.com/climg/60ebaa6e09287c9311480182.jpg

写回答

1回答

ccmouse

2021-07-16

TraverseFunc这个函数是一个递归函数,我这里也贴一下

http://img1.sycdn.imooc.com/climg/60f1293b09bab22c24100760.jpg

这个TraverseFunc函数会递归的调用,并最终访问到树中每一个节点,f只是这个TraverseFunc的一个参数,函数式编程中,函数也是一等公民,也可以作为参数传递。对于每个节点,它会对其再调用f(node)。


我们使用TraverseFunc的方法是给出这样一个参数:

func(node *tree.Node) {

   nodeCount++

}

注意这个函数我们在调用root.TraverseFunc的时候并没有被调用,整个函数式一个参数,作为名字f,传进了TraverseFunc。什么时候调用呢,运行到19行f(node)的时候。而且,由于TraverseFunc的递归调用,f被调用了许多次,每个node各一次。

因此最终的nodeCount也就是节点数量。


1

0 学习 · 1399 问题

查看课程