在类别中递归地反转 NSString
Reverse NSString recursively in category
我将此 类别 用于以 递归 方式反转 NSString
。我得到正确的答案。但我不确定 内存管理 是否合适。我对 Objective-C.
中的内存管理了解不多
任何其他有效的方法都将是非常令人钦佩的。
-(NSString *)reverseString{
if ([self length]<2) {
return self;
} else {
return [[[self substringFromIndex:1] reverseString] stringByAppendingString:[self substringToIndex:1]];
}
}
然而,这个问题类似于Reverse NSString text但不是重复的,因为这里我用递归来实现它。我特别询问了内存消耗,而不是任何代码示例。
使用递归来反转字符串是一个有趣的思维练习,但它会非常缓慢并且会严重浪费内存。您需要创建 2n 个临时字符串。 (其中n是你的字符串中的字符数)那些字符串中的n个只有1个字符长,另外n个字符串是1、2、3、4、5等字符,最多n-1个。
(内存分配很慢。)
此外,您还创建了 n 个堆栈帧。正如 rmaddy 在他的评论中所说,对于很长的字符串,您可能会导致堆栈溢出。
如果您这样做是为了了解递归,那很好。否则,完全放弃这种方法并编写向后循环遍历数组的代码,将每个字符附加到可变字符串。
我将此 类别 用于以 递归 方式反转 NSString
。我得到正确的答案。但我不确定 内存管理 是否合适。我对 Objective-C.
任何其他有效的方法都将是非常令人钦佩的。
-(NSString *)reverseString{
if ([self length]<2) {
return self;
} else {
return [[[self substringFromIndex:1] reverseString] stringByAppendingString:[self substringToIndex:1]];
}
}
然而,这个问题类似于Reverse NSString text但不是重复的,因为这里我用递归来实现它。我特别询问了内存消耗,而不是任何代码示例。
使用递归来反转字符串是一个有趣的思维练习,但它会非常缓慢并且会严重浪费内存。您需要创建 2n 个临时字符串。 (其中n是你的字符串中的字符数)那些字符串中的n个只有1个字符长,另外n个字符串是1、2、3、4、5等字符,最多n-1个。
(内存分配很慢。)
此外,您还创建了 n 个堆栈帧。正如 rmaddy 在他的评论中所说,对于很长的字符串,您可能会导致堆栈溢出。
如果您这样做是为了了解递归,那很好。否则,完全放弃这种方法并编写向后循环遍历数组的代码,将每个字符附加到可变字符串。