一.什么是递归
递归:在一个函数里面调用它自己(包括main函数)。
二.使用递归函数的注意事项
1.存在限制条件,当满足这个限制条件时,递归便不再继续。
2.每次递归调用之后越来越接近这个限制条件。
3.注意栈溢出。(递归层次不能太深)
三.实例
输入一个无符号整型数n,得到n的每一位数字:
例如:1234,使用函数递归,得到1,2,3,4。
#include<stdio.h>
void print(unsigned int n)
{
if(n>9)//限制条件
{
print(n/10);//n\10越来越接近9
}
printf("%u ",n%10);
}
int main()
{
printf("请输入一个正整数,得到其每一位数:\n);
unsigned int n=0;
scanf("%d",&n);
print(n);
}
解题思想:当输入1234时,n的值会变为1234,n=1234进入print函数,
1,判断1234是否大于9?—————是,n/10=123,n=123进入print函数(进行递归)。(此时if语句还未走出,无法执行printf语句。)
2,判断123是否大于9?——————是,n/10=12,n=12进入print函数(进行递归)。(此时if语句还未走出,无法执行printf语句。)
3,判断12是否大于9?——————是,n/10=1,n=1进入print函数(进行递归)。(此时if语句还未走出,无法执行printf语句。)
4,判断1是否大于9?————否,不进入print函数(不进行递归),打印n%10=1。
5,返回3,步骤2给到3的n=12,print的步骤已执行完,到打印的步骤,打印n%10=2。
6,返回2,步骤1给到2的n=123,print的步骤已执行完,到打印的步骤,打印n%10=3。
7,返回1,main给到1的n=1234,print的步骤已执行完,到打印的步骤,打印n%10=4。
8.print函数已执行完。
实例2:
#include<stdio.h>
void test(int n)
{
if(n<10000)
{
test(n+1);
}
}
int main()
{
test(1);
return 0;
}
解题思想:当n<10000时,一直递归函数test,n++,直到n加到10000。但是,内存空间太大,会出现栈溢出(stack overflow)。
实例来源于b站up鹏哥c语言,C语言入门到精通课程。