函数无限递归下去会栈溢出
条件:
1.当递归满足限制条件的时候,递归就不再 继续
2.每次递归调用后越来越接近这个限制条件
有递推公式的时候最好用递归
求n的阶乘
不考虑溢出,n的阶乘就是1~n的数字积累相乘

cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fact(int n) {
if (n == 0)
return 1;
else if (n > 0)
return n * fact(n - 1);
}
int main() {
int n = 0;
scanf("%d", &n);
int a = fact(n);
printf("%d! = %d", n,a);
}
优化:用迭代的方式(循环是一种迭代,迭代不仅仅是循环)
cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fact(int n) {
int sum = 1;
for (int i = 1; i <= n; i++) {
sum *= i;
}
return sum;
}
int main() {
int n = 0;
scanf("%d", &n);
int a = fact(n);
printf("%d", a);
return 0;
}
输入一个整数m,按照顺序打印它的每一位
cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void print(int n) {
if (n > 9)
print(n / 10);
printf("%d", n % 10);
}
int main() {
int n = 0;
scanf("%d ", &n);
print(n);
return 0;
}

斐波那契数列
递归方式:
cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fact(int n) {
if (n < 2)
return 1;
else
return fact(n - 2) + fact(n - 1);
}
int main() {
int n = 0;
scanf("%d", &n);
int a = fact(n);
printf("%d", a);
return 0;
}
迭代方式(推荐)

cpp
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int fact(int n) {
int a = 1;
int b = 1;
int c = 1;
while (n > 2) {
c = a + b;
a = b;
b = c;
n--;
}
return c;
}
int main() {
int n = 0;
scanf("%d", &n);
int a = fact(n);
printf("%d", a);
return 0;
}