鱼C论坛

 找回密码
 立即注册
查看: 1122|回复: 1

[已解决]新手,有两个国二的问题请教大家

[复制链接]
发表于 2019-1-29 11:09:24 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
第一个问题:
#include<stdio.h>
#define S(x) x/x
void main()
{
        int k=5,j=2;
        printf("%d,%d\n",S(k+j),S(j+k));
}
输出的结果为什么是7,9??我感觉应该是1,1才对啊。。k+j和j+k有什么区别??


第二个问题:
#include<stdio.h>
void  fun(int x)
{
   if(x/2>0) fun(x/2);
printf("%d",x);
}
void main()
{
fun(6);printf("\n");
}
这里考察函数的递归调用,可是为什么输出的结果是136,应该是631才对啊??
最佳答案
2019-1-29 11:40:40
1 宏定义是无脑替换,所以
S(k+j) 等价于 k+j/k+j ==5+2/5+2 == 7
同理 S(j+k)

2 递归的意思是先递再归,也就是最后一层递归是最先出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2019-1-29 11:40:40 | 显示全部楼层    本楼为最佳答案   
1 宏定义是无脑替换,所以
S(k+j) 等价于 k+j/k+j ==5+2/5+2 == 7
同理 S(j+k)

2 递归的意思是先递再归,也就是最后一层递归是最先出来的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-22 11:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表