Anonymous recursion: Difference between revisions

Content added Content deleted
Line 1,142: Line 1,142:
result = 1;
result = 1;
else
else
result = [[self performSelector:_cmd withObject:[NSNumber numberWithInt:i-1]] intValue]
result = [[self performSelector:_cmd withObject:@(i-1)] intValue]
+ [[self performSelector:_cmd withObject:[NSNumber numberWithInt:i-2]] intValue];
+ [[self performSelector:_cmd withObject:@(i-2)] intValue];
return [NSNumber numberWithInt:result];
return @(result);
}
}
@end
@end


int main (int argc, const char *argv[]) {
int main (int argc, const char *argv[]) {
@autoreleasepool {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
AnonymousRecursion *dummy = [[AnonymousRecursion alloc] init];
AnonymousRecursion *dummy = [[AnonymousRecursion alloc] init];
NSLog(@"%@", [dummy fibonacci:[NSNumber numberWithInt:8]]);
NSLog(@"%@", [dummy fibonacci:@8]);
[dummy release];


}
[pool release];
return 0;
return 0;
}</lang>
}</lang>
Line 1,168: Line 1,167:
reason:@"fib: no negative numbers"
reason:@"fib: no negative numbers"
userInfo:nil];
userInfo:nil];
__block int (^f)(int);
int (^f)(int);
f = ^(int n) {
__block __weak int (^weak_f)(int);
weak_f = f = ^(int n) {
if (n < 2)
if (n < 2)
return 1;
return 1;
else
else
return f(n-1) + f(n-2);
return weak_f(n-1) + weak_f(n-2);
};
};
return f(n);
return f(n);
Line 1,179: Line 1,179:


int main (int argc, const char *argv[]) {
int main (int argc, const char *argv[]) {
@autoreleasepool {
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"%d", fib(8));
NSLog(@"%d", fib(8));


}
[pool release];
return 0;
return 0;
}</lang>
}</lang>