在调用一个函数的过程中又出现直接或间接地调用该函数本身,成为函数的递归调用.
递归的两个条件:
1.函数自己调用自己;
2.必须有个明确地返回值.
说明: 函数每次调用,都会分配新的存储空间.
例一:
有5个人坐在一起,问第5个人多少岁?他说比第4个人大2岁。问第四个人岁数,他说比第三个人大2岁,以此类推,最后问第一个人,他说是10岁。请问第5个人多大?
-(NSUInteger)computeAgeWithNumber:(NSUInteger)num {
if (num == 1) return 10;
return [self computeAgeWithNumber:num-1] + 2;
}
- (void)viewDidLoad{
[super viewDidLoad];
NSUInteger result=[self computeAgeWithNumber:5];
NSLog(@"result=%ld",result);
}
例二:
一列数的规则如下: 1、1、2、3、5、8、13、21、34、......求第30位是多少,用递归算法实现。
-(NSUInteger)computeCountwithNumber:(NSUInteger)num{
if (num <= 2) return 1;
return [self computeCountwithNumber:num-1] + [self computeCountwithNumber:num-2];
}
- (void)viewDidLoad{
[super viewDidLoad];
NSUInteger result=[self computeCountwithNumber:30];
NSLog(@"result=%ld",result);
}
例三:
利用递归实现n的阶乘的计算
-(NSUInteger)computeFactorialWithNumber:(NSUInteger)num {
if (num == 0 || num == 1) return num;
return [self computeFactorialWithNumber:num-1] * num;
}
- (void)viewDidLoad{
[super viewDidLoad];
NSUInteger result=[self computeFactorialWithNumber:5];
NSLog(@"result=%ld",result);
}