C语言递归调用子函数
示例代码1:10进制转16进制
查看代码
#include<stdio.h>
void dec2hex(int n)
{
if(n>15)
dec2hex(n/16);
if(n%16 < 10)
printf("%c",n%16+'0');
else
printf("%c", n%16+55);
//printf("%c",n%16<10 ? n%16+'0' : n%16+55); //小于16的数,那么就将其取模% 然后加上'0'
}
//
int main()
{
int n;
scanf("%d",&n);
dec2hex(n);
return 0;
}
当输入20时,程序的运行状况如下:
-
首先,在
main函数中,程序会等待用户输入一个整数,假设用户输入的是20。 -
然后程序调用
dec2hex函数,并将输入的整数20作为参数传递给dec2hex函数。 -
在
dec2hex函数中,首先判断输入的数值20是否大于15。由于20大于15,所以会进行第一次递归调用,即dec2hex(20/16),即dec2hex(1)。 -
在第一次递归调用中,
dec2hex函数会继续判断1是否大于15。由于1不大于15,所以不会进行第二次递归调用。然后,程序会执行下面的代码:- 计算
1 % 16的结果,即1。 - 由于
1小于10,所以输出字符'1'。
- 计算
- 第一次递归调用结束,程序返回到之前的递归调用处继续执行未完成的代码。这是因为递归调用是通过函数调用栈来实现的,每次函数调用都会在栈中创建一个新的帧,包含函数的参数、局部变量和返回。
-
返回到第一次递归调用,继续执行下面的代码:
- 计算
20 % 16的结果,即4。 - 由于
4小于10,所以输出字符'4'。
- 计算
-
回到
main函数,dec2hex函数执行完毕,程序结束并返回0。
因此,当输入20时,最终输出结果是 14
示例代码2:阶乘
查看代码
#include <stdio.h>
int n,y;
int f;
int fac(int n)
{
if(n<0)
printf("n<0,data error!");
else if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return(f);
}
int main()
{
printf( "input an integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%d\n",n,y);
return 0;
}
当输入3时,输出6:
程序是这样fac(2)*3,然后fac(1)*2,然后计算可知fac(1)为1,。此时就倒起回去,挨个计算,最终等于6
当输入5时,输出20:

作者QQ4577105

浙公网安备 33010602011771号