재귀를 이해합니다. 우리는 하나의 메소드에서 시작하여 기본 케이스에 도달 할 때까지 자체를 호출합니다. 이 코드가 어떻게 작동하는지 이해해주십시오. 우리는 스택을 꺼낼 때마다 기본 케이스에 도달하면 끝에 double을 반환한다는 것을 알고 있습니다. 스택은 호출 될 때마다 수정됩니까? 예를 들어 : 3 (Enter) 5 (Enter) *는 분명히 15와 같을 것입니다. 그러나 내가 그것을 볼 때 메소드를 기반으로합니다. if 문이 stack (3,5)이 5를 반환하면 두 번째 호출에서 5를 반환합니다. (3,5)를 보내고 5를 다시 반환합니까? 왜 두 번째가 (3,5) 대신에 스택 (3)으로 보내지 는가?아마도 범위와 관련된 재귀 호출을 설명하십시오.
+ (double)popOperandOffProgramStack:(NSMutableArray *)stack
{
double result = 0;
id topOfStack = [stack lastObject];
if (topOfStack) [stack removeLastObject];
if ([topOfStack isKindOfClass:[NSNumber class]])
{
result = [topOfStack doubleValue];
}
else if ([topOfStack isKindOfClass:[NSString class]])
{
NSString *operation = topOfStack;
if ([operation isEqualToString:@"+"]) {
result = [self popOperandOffProgramStack:stack] +
[self popOperandOffProgramStack:stack];
} else if ([@"*" isEqualToString:operation]) {
result = [self popOperandOffProgramStack:stack] *
[self popOperandOffProgramStack:stack];
} else if ([operation isEqualToString:@"-"]) {
double subtrahend = [self popOperandOffProgramStack:stack];
result = [self popOperandOffProgramStack:stack] - subtrahend;
} else if ([operation isEqualToString:@"/"]) {
double divisor = [self popOperandOffProgramStack:stack];
if (divisor) result = [self popOperandOffProgramStack:stack]/divisor;
}
}
return result;
}
궁금한 점이 있다면, 3,0을 입력하면 어떻게됩니까? – user523234