从递归函数返回NSString

1 recursion objective-c

我有一个递归函数,旨在解析树并将树节点的所有值存储在NSString中.

下面的算法是否正确?

NSString* finalString = [self parseTree:rootNode string:@""];

-(NSString*)parseTree:(Node*)currentNode string:(NSMutableString*)myString
{
    [myString appendText:currentNode.value];

    for(int i=0;i<[currentNode.children length];i++){
        return [self parseTree:[currentNode.children] objectAtIndex:i] string:myString];
    }
}
Run Code Online (Sandbox Code Playgroud)

Dav*_*ong 9

不它不是.

  1. @""作为起始字符串传入.但是,@""不是NSMutableString.这肯定会在运行时产生异常.
  2. 一旦你return,那么该方法停止,你不再执行.这意味着你经历了循环的第一次迭代,你将停止.永远.
  3. 如果currentNode中没有子节点,则不返回任何内容.
  4. 没有这样的方法appendText:.你可能意味着appendString:

这是另一个问题:为什么你需要返回一个值?你正在传递NSMutableString并修改它,那么为什么不总是在适当的位置修改它而不打扰返回值呢?例如:

- (void) parseTree:(Node*)currentNode string:(NSMutableString*)myString {
    [myString appendString:currentNode.value];

    for(Node * child in [currentNode children]){
        [self parseTree:child string:myString];
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用以下命令调用:

NSMutableString * finalString = [NSMutableString string];
[self parseTree:aNode string:finalString];
Run Code Online (Sandbox Code Playgroud)