从递归函数返回NSString

时间:2010-05-29 14:41:07

标签: objective-c recursion

我有一个递归函数,旨在解析树并将树节点的所有值存储在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];
    }
}

1 个答案:

答案 0 :(得分:9)

不,不是。

  1. 您传入@""作为起始字符串。但是,@""不是NSMutableString。这肯定会在运行时产生异常。
  2. 只要你return,那么该方法就会停止,你就不再执行了。这意味着你经历了循环的第一次迭代,你将停止。永远。
  3. 如果currentNode中没有子节点,则不返回任何内容。
  4. 没有appendText:这样的方法。你可能意味着appendString:
  5. 这是另一个问题:为什么你需要返回一个值?你正在传递一个NSMutableString并修改它,那么为什么不只是总是在适当的位置修改它而不用打扰返回值?例如:

    - (void) parseTree:(Node*)currentNode string:(NSMutableString*)myString {
        [myString appendString:currentNode.value];
    
        for(Node * child in [currentNode children]){
            [self parseTree:child string:myString];
        }
    }
    

    然后用:

    调用它
    NSMutableString * finalString = [NSMutableString string];
    [self parseTree:aNode string:finalString];