今天又是知识增加的一天,让我向大家分享新的知识吧。直接开干!!!
例
int app(int a){
static int b = 3;
if(a>0) return a*app(--b);
else return 2;
}
int main(){
unsigned int a = 4;
int b = -6;
int res = 0;
if(a>b){
int a = 4;
res = app(a);
}else{
int b = 3;
res = app(b);
}
printf("%d\n",res);
return 0;
}
答案为:12。
1.这题答案其实有两种选择,就是看选择哪个分支执行程序了。if为4* 2 * 1* 2=16 else为3 * 2 * 1 * 2=12.让我来逐步分析过程。
2.首先,我们可以发现
unsigned int a=4;
int b=-6;
一眼看过去 ,我们可以明显发现4>-6 ,所以我果断选择了if语句,但a和b两种的类型不同,这就对结果产生了影响。
3 int main(){
4 unsigned int a=4;
5 int b=-6;
6 if(a>b){
7 printf("a>b\n");
8 }else{
9 printf("a<b\n");
10 }
11
12 return 0;
13 }
答案为:
a<b
这是为什么呢?
其实是因为unsigned和signed混合运算时会转化为
unsigned类型
int b=-6;
printf("%u\n",b);// 4294967290
明显b>a
3.由上我们可知 ,我们选择else分支,
1).res=3 * app(2);
2).res=3 * 2 * app(1);
3).res=3 * 2 * 1 * app(0);
4).res=3 * 2 * 1 * 2; //12
如果大家具体的递归不懂可以私聊我,我到时候私聊