Emon Emoni Emon Emoni - 4 months ago 20
Objective-C Question

Recursive Factorial

#import <Foundation/Foundation.h>

@interface Factorial : NSObject
+(int) factorial:(int) n;
@end

@implementation Factorial

+(int) factorial:(int)n
{
if (n==0) {
return 1;
}
else
{
return [self factorial:n]*[self factorial:n-1];
}
}

@end

int main (int argc, const char * argv[])
{
int i = [Factorial factorial:5];
NSLog(@"%d", i);
return 0;
}


what is the problem with this code?? i am new in objective-c (i am from c background)
Or, i am getting wrong concept about objective c??

(Compiler generating ..)
GNU gdb 6.3.50-20050815 (Apple version gdb-1708) (Mon Aug 8 20:32:45 UTC 2011)
Copyright 2004 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "x86_64-apple-darwin".tty /dev/ttys002
sharedlibrary apply-load-rules all
[Switching to process 1413 thread 0x0]
warning: Unable to restore previously selected frame.
(gdb)


and getting stuck at line +(int) factorial:(int) n at the @implementation resulting EXC_BAD_ACESS.

Thanks

Answer

I am not familiar with ObjC, but lines:

+(int) factorial:(int)n
    //...
    return [self factorial:n]*[self factorial:n-1];
    //                      ^

look suspicious for me. It means that for n != 0 you will get endless recursion and face stack overflow :-)

Comments