简单了解递归
1.什么是递归???
编程程序调用自身的编程技巧称为递归( recursion)
递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接 或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的 规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计 算,大大地减少了程序的代码量。
递归的主要思考方式在于:把大事化小
但是要特别注意在不停的调用函数自身是有可能会产生栈溢出
2.递归的两个必要条件
(1.)存在限制条件,当满足这个限制条件的时候,递归便便不再继续。
(2.)每次递归调用之后越来越接近这个限制条件。
特点:能用递归处理的问题都是可以用它的子问题来处理(相同的代码)
接下来看道题
把一个整型(无符号),转化为字符型并打印出来
#include<stdio.h>
#include<Windows.h>
void print(num)
{
if (num > 9)
{
print(num/10);
}
printf("%c ", num % 10 + '0');
}
int main()
{
int num = 0;
num = 4567;
print(num);
system("pause");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/41bce6e4ecaeb9c4e832ca1cec9162ac.png)
2.编写函数不允许创建临时变量,求字符串的长度
int Strlen(const char*str)
{
if (*str == '\0')
return 0;
else return 1 + Strlen(str + 1);
}
int main()
{
char *p = "abcdef1234";
int len = Strlen(p);
printf("%d\n", len);
system("pause");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/1e1202f0d66a2369bcbccf39e097aa21.png)
3.求第n个斐波那契数列
例如:
1、1、2、3、5、8、13、21、34、……这样的一串数字叫做斐波那契数列
int Fib(int n)
{
if (n <= 2)
return 1;
return Fib(n - 1) + Fib(n - 2);
}
int main()
{
int n = 0;
printf("请输入一个数》\n");
scanf_s("%d", &n);
Fib(n);
printf("%d\n", Fib(n));
system("pause");
return 0;
}
3.
![](https://i-blog.csdnimg.cn/blog_migrate/6eeced1c7d7864e3ead9fe65712800ad.png)
4.求n的阶乘(不考虑溢出)
int factorial(int num)
{
if (num == 1)
return 1;
return num * factorial(num - 1);
}
int main()
{
int num = 0;
printf("请输入一个数:");
scanf_s("%d", &num);
factorial(num);
printf("%d\n", factorial(num));
system("pause");
return 0;
}
![](https://i-blog.csdnimg.cn/blog_migrate/9a669846d89ce645df378a35ef5d747c.png)