Как кодировать рекурсию в Objective-C с классами? - PullRequest
1 голос
/ 23 декабря 2009

Я только начал изучать Objective-C и ООП ... поэтому у меня очень глупый вопрос :) Я хочу понять, как писать рекурсивные функции в Objective-C.

В качестве примера я получаю факториал. Вот мой код)) хе-хе

#import <Foundation/Foundation.h>

@interface Factorial : NSObject
{
    int nFact;
}

-(int) countFactorial:(int) nFact;
-(void) printFactorial;

@end //Factorial

@implementation Factorial

-(int) countFactorial:(int) n
{
    int tmp;

    if (n!=0)
    {
        tmp=n*countFactorial(n-1);
    }
    else {
        return(0);
    }

    nFact=tmp;
}

-(void) printFactorial
{
    NSLog(@"Factorial = %i",nFact);
}

@end //Factorial

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    id myFact=[Factorial new];
    int qqq=[myFact countFactorial:5];
    [myFact printFactorial];
    [myFact release];

    [pool drain];
    return 0;
}

Я получаю ошибку от компилятора - я неявно объявляю функцию countFactorial и я получаю ошибку (конечно) от компоновщика, что он не нашел countFactorial

Пожалуйста, дайте мне любые предложения, как реализовать рекурсию в Objective-C Я хочу использовать его в моем следующем «проекте» - крестики-нолики - чтобы найти правильный ход с помощью рекурсии)

Thx!

Ответы [ 3 ]

6 голосов
/ 23 декабря 2009

Вы пытаетесь вызвать функцию C, а не метод объекта. Для вызова метода объекта используйте следующее:

tmp=n* [self countFactorial:n-1];

Возможно, вы захотите прочитать введение Apple в Objective-C , чтобы помочь вам понять синтаксис.

2 голосов
/ 23 декабря 2009

Это не функции, а методы. Вы называете их как [self countFactorial:n-1].

Вы могли бы написать обычную функцию C, чтобы сделать то же самое.

0 голосов
/ 23 декабря 2009

Вам нужно использовать self при вызове методов для одного и того же объекта, например:


tmp=n*[self countFactorial:n-1];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...