2009-12-23 42 views
1

我刚开始学习Objective-C和OOP ...所以我有非常愚蠢的问题:) 我想了解如何在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

Plz给我的任何建议如何在Objective-C 中实现递归我想在我的下一个“项目”中使用它 - tic tac toe - 通过递归找到正确的移动)

Thx!

回答

6

您试图调用C函数,而不是对象的方法。要调用对象的方法使用以下命令:

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

您可能需要阅读苹果的introduction to Objective-C帮助你理解的语法。

2

这些不是功能,它们是方法。你称他们为[self countFactorial:n-1]

虽然你可以写一个普通的C函数来做同样的事情。

0

您需要调用同一个对象的方法时使用self - 这样的:


tmp=n*[self countFactorial:n-1]; 
相关问题