2016-06-01 2 views
2

웨이에서 NSString을 역순으로 바꾸기 위해 을 역순으로 사용했습니다. 나는 정답을 얻고있다. 그러나 이것이 괜찮은지 확실하지 않은 경우 메모리 관리. 나는 Objective-C의 메모리 관리에 대해 많이 모른다.NSString을 재귀 적으로 역순으로 바꾸십시오.

기타 효율적인 방법은 매우 감탄할 것입니다. 여기에 내가 재귀로 구현하고 있습니다 때문에

-(NSString *)reverseString{ 
    if ([self length]<2) { 
     return self; 
    } else { 
     return [[[self substringFromIndex:1] reverseString] stringByAppendingString:[self substringToIndex:1]]; 
    } 
} 

그러나이 문제는 Reverse NSString text하지만 중복 유사하다. 그리고 특별히 코드 예제가 아닌 메모리 사용량에 대해 질문했습니다.

+0

긴 문자열 (수천 자릿수)을 뒤집어 쓰려고하면 스택 오버플로가 발생할 가능성이 높습니다. 그리고 코드는 하나 이상의 문자로 인코딩 된 모든 유니 코드 문자로 잘못된 문자열을 생성합니다. – rmaddy

+0

솔직히이 재귀 알고리즘을 사용하는 것은 아마도 문자열을 뒤집는 가장 유용한 방법 중 하나 일 것입니다. Sanjit에 의해 링크 된 복제물은이 알고리즘보다 훨씬 더 나은 접근법을 가지고 있습니다. – rmaddy

+1

그냥 재미있게하려면 이모티콘이 포함 된 문자열을 뒤집어보세요. 서면, 공간 및 시간 요구 사항은 O (n^2)입니다. 여기서 n은 원래 문자열의 길이입니다. 10 만 자의 문자열로 Mac이 무릎을 꿇을 것입니다. – gnasher729

답변

2

문자열을 뒤집기 위해 재귀를 사용하는 것은 흥미로운 생각의 연습이지만, 매우 느리고 기억의 낭비를 불러 일으키고 있습니다. 2n 임시 문자열을 만들어야합니다. (여기서 n은 문자열의 문자 수) n은 해당 문자열의 길이가 1 자이고 다른 n 개의 문자열은 1, 2, 3, 4, 5 등입니다. 문자는 최대 n-1입니다.

(메모리 할당. 매우 느립니다)

게다가 당신은 스택 프레임 N 만듭니다. rmaddy가 언급 한 바에 따르면 매우 긴 문자열에 대해 스택 오버플로가 발생할 가능성이 높습니다.

재귀에 대해 배우려면이 작업을 수행하는 것이 좋습니다. 그렇지 않으면이 접근법을 완전히 버리고 배열을 거꾸로 반복하는 코드를 작성하여 각 문자를 변경 가능한 문자열에 추가하십시오.

+0

나를 두포의 아래에서 이해하게하기위한 감사합니다. 네가 말한 것처럼 나는 생각할 수 없었다. 내 질문에 대한 매우 설명적인 대답. 그리고 예, 방금 Objective-C를 배우기 시작했습니다. 그래서 "기본 재귀는 어떨까요?"라고 생각하고 결국 이것을 끝 냈습니다. – nayem

관련 문제