typescript 递归成员-递归中的变量范围

编写递归函数时,当递归函数内部需要改变对象时,返回类型是否应该为void(事实证明无关紧要),是否应该传入参数列表(很重要)?

这太笼统了。 例如,如果给你一棵二叉树,让你编写一个方法,将二叉树按照中序遍历的顺序写入到 ArrayList 字段中。 你会怎么写呢? 这是leetcode94的问题。

要将结果放入数组字段中,我们自然会想到以下方式

第一类:递归函数的参数中不放置数组

1、数组作为全局变量(成员变量)typescript 递归成员,递归函数的list参数只是根。 是否返回并不重要。 显然是可行的,而且一定是可行的(leetcode 94版本3)

2.试图返回数组来避免使用成员变量被证明是不可行的。 你可以看看我对第94题的解答

第二类:数组放在递归函数的参数中

在这种情况下,是否返回数组并不重要。

不过,虽然array和root一起放在了递归函数参数列表中,但可能并没有什么用处。

简单的leetcode94题就可以了。 但就像109题一样,行不通。

因为递归和迭代不同,我认为函数传入的实际上是一个值,比如对象数组的地址,而函数实际上创建了一个新的引用来指向传入的对象的地址,所以这个数组虽然不同,但都指向同一件事。 这时候如果你在递归代码中改变了数组的指向地址,一旦退出这一级递归,回到下一级递归,数组就会变回来,比如leetcode 109题,我不不想像官方解决方案那样使用globalHead成员变量,想把head放到递归函数链表中,尽量保持head的连续性typescript 递归成员,并在里面进行head=head.next的联通指针(引用)操作递归代码块,但它不起作用!

那为什么说不一定呢? 也就是说,在二叉树的简单遍历任务中,可以不设置成员变量,而是将数组放入递归函数参数列表中。 这是因为你在递归函数内部实际上已经对数组进行了操作,但仍然是array.add()操作,数组引用指向的地址仍然没有改变! 例如leetcode94问题版本1

说了这么多,总之,如果想改变递归函数内部的指针(引用),就必须将引用设置为成员变量

如果只是在最后进行添加操作,而不改变引用指向的地址,则可以将引用倒入参数列表中。

无论如何,在不设置成员变量的情况下,不将引用放入参数列表中是不可能的