递归:就是一个方法在执行的时候调用自己本身的过程就称之为递归
递归其实就相当于数学当中的“数学归纳法”,有一个其实条件,接下来是判断条件,有一个递推公式,最后证明。
例:要求N!
直接求不好求,可以先算当N = 1的时候,结果等于多少,作为递归的初始条件。然后求N的!就相当于求N*(N-1)!。举个例子,加入让你求5的阶乘。
5! = 5 * 4!
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1!
过程是一层一层叠加的。
1.用户输入一个N,求N的阶乘:
#include<stdio.h>
int getCount(int a) {
if (a == 1) {
return 1;
}
return a * getCount(a - 1);
}
int main() {
int a = 0;
scanf("%d", &a);
int ret = getCount(a);
printf("阶乘等于:%d\n", ret);
return 0;
}
2.递归求1+2+3+...+N的和:
#include<stdio.h>
int getCount(int a) {
if (a == 1) {
return 1;
}
return a + getCount(a - 1);
}
int main() {
int a = 0;
scanf("%d", &a);
int ret = getCount(a);
printf("总和等于:%d\n", ret);
return 0;
}
3.用递归计算斐波那契数列的第N项:
/**
公式是f(n-1)+f(n-2);
1,1,2,3,5,8,13,21,34......
**/
#include<stdio.h>
int fib(int a) {
if (a == 1 || a == 2) {
return 1;
}
return fib(a - 1) + fib(a - 2);
}
int main() {
int a = 0;
scanf("%d", &a);
int ret = fib(a);
printf("%d", ret);
return 0;
}