递归函数:
程序调用自身的编程技巧成为递归(recursion)。递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需要少量代码的程序就可以描述出解题过程所需的多次重复计算,大大地减少程序的代码量。递归的主要思考方式在于:把大事化小
递归的两个必要条件:
- 存在限制条件,当满足这个限制条件的时候,递归使不再继续。
- 每次递归调用后之后越来越接近这个限制条件。
例如:
用递归的方法实现数字分离。
要求:用递归的方法将数字分离并输出;
例如:输入->1234,输出->1 2 3 4(中间有一个空格)
完整的代码如下:
#include<stdio.h>
void PrintNum(int n)
{
if (n > 9)
{
PrintNum(n / 10); //call function PrintNum()
}
printf("%d ", n % 10);
}
int main()
{
unsigned int num = 0;
printf("Enter the number->");
scanf("%d", &num);
PrintNum(num); //call function PrintNum()
return 0;
}
验证结果:
递归的益处:
代码更简洁清晰,可读性更好
递归可读性好这一点,对于初学者可能会反对。实际上递归的代码更清晰,但是从学习的角度要理解递归真正发生的什么,是如何调用的,调用层次和路线,调用堆栈中保存了什么,可能是不容易。但是不可否认递归的代码更简洁。一般来说,一个人可能很容易的写出前中后序的二叉树遍历的递归算法,要写出相应的非递归算法就比较考验水平了,恐怕至少一半的人搞不定。所以说递归代码更简洁明了。
递归的缺陷:
由于递归需要系统堆栈,所以空间消耗要比非递归代码要大很多。而且,如果递归深度太大,可能系统撑不住。
tips:
1、欢迎你在评论区留下您的观点,在学编程的路上不孤单。