今天做题遇到了这样一道题:
要用递归但是函数没有返回值。
想用除二取余法,但是最后要把余数逆序,又不能使用返回值,一开始不知道怎么处理。
解决方法:
利用函数调用的特点:遇到函数时,主函数暂停,先执行当前被调用的函数,完了之后再继续主函数。也就是调用栈的“后进先出”特点。
使用了flag 是因为让这个函数能输出0的二进制数。
flag 设成静态变量或者全局变量效果都是一样的。我设成了静态变量。
#include<stdio.h>
void dectobin(int n)
{
static int flag=0;//flag用于判断参数n==0时,n是用户输入时就为0,还是经过递归之后成为0
if(n==0 && flag==0) //用户天然输入n为零
{
printf("%d",0);
return ;//return 有结束函数调用的作用
}
else if(n==0 && flag==1)
{
return ;
}
else
{
flag =1;
dectobin(n/2);
printf("%d",n%2);
}
}
int main()
{
int n;
scanf("%d",&n);
dectobin(n);
return 0;
}