函数递归

函数无限递归下去会栈溢出

条件:

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;
}