递归法:
经典递归问题实战
第一类问题:问题的定义是按递归定义的
/**
* Title: 阶乘的实现 n*(n-1)*(n-2)*...*1
* Description:
* 递归解法
* 非递归解法
*/
#include<stdio.h>
long f(int n) {
if (n == 1) // 递归终止条件
return 1;
return n * f(n - 1); // 递归调用,缩小问题的规模
}
long f_loop(int n) {
long result = n;
while (n > 1) { //用循环代替递归解法
n--;
result = result * n;
}
return result;
}
int main() {
printf("Recursive :%d\n " , f(6));
printf("Recursive :%d \n" , f(3));
printf("Loop : %d\n" , f_loop(6));
printf("Loop : %d\n" ,f_loop(3));
}
结果:720;6;720;6