0
点赞
收藏
分享

微信扫一扫

【C语言】函数递归(详解)

最不爱吃鱼 2022-02-07 阅读 74

🌿🌿前言

 

🔆🔆什么是递归?

 

🎧🎧递归两个必要条件

 

👻👻递归实例

⛳️实例1(按照顺序打印一个数的整形值)

参考代码(可以先去尝试是否可以解决问题)

 

🏌画图讲解 

 

 

🌐程序运行结果

 

🛠完整代码 

#include <stdio.h>
void print(int n)
{
if(n>9)
{
print(n/10);
}
printf("%d ", n%10);
}
int main()
{
int num = 1234;
print(num);
return 0;
}

 

🐴实例2 (使用函数在不创建变量的情况下求字符串长度)

参考代码

 

 

 🚁画图讲解

 👿程序运行结果

 

😗完整代码

#include <stdio.h>
int Strlen(const char* str)
{
	if (*str == '\0')
		return 0;
	else
		return 1 + Strlen(str + 1);
}
int main()
{
	char* p = "abcd";
	int len = Strlen(p);
	printf("%d\n", len);
	return 0;
}

 

😁😁递归与迭代

 

对于递归与迭代,我们同样通过两个实例来理解:

🕹实例1 (求n的阶乘)

方法一(使用递归

参考代码

 

通过数学方法讲解

 

完整代码 

#include <stdio.h>
int fac(int n)
{
	if (n == 1)
		return 1;
	else
		return n * fac(n - 1);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = fac(n);
	printf("%d\n", ret);
	return 0;
}

 

方法二(使用迭代)

完整代码

#include <stdio.h>
int main()
{
	int n = 0;
	scanf("%d", &n);
	int i = 0;
	int ret = 1;
	for (i = 1; i <= n; i++)
	{
		ret *= i;
	}
	printf("%d\n", ret);
	return 0;
}

 运行结果

 

😆实例2 (求解斐波那契数列)

 

🔍方法一 (递归求解)

 参考代码

💰通过数学方法求解 

运行结果 

 

完整代码 

#include <stdio.h>
int fib(int n)
{
	if (n <= 2)
		return 1;
	else
		return fib(n - 1) + fib(n - 2);
}
int main()
{
	int n = 0;
	scanf("%d", &n);
	int ret = fib(n);
	printf("%d\n", ret);
	return 0;
}

 

 运行结果

 

🐷方法二(迭代求解) 

参考代码 (主函数不变)

画图讲解 

📯完整代码 

#include <stdio.h>
int fib(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 ret = fib(n);
	printf("%d\n", ret);
	return 0;
}

💜运行结果 

这时候我们会想:

为什么有时候用递归简便,而有时候用迭代简便呢?

举报

相关推荐

0 条评论