免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: weckay
打印 上一主题 下一主题

[函数] EMC小有难度的笔试,撰写仅有一行的语句的函数??? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2007-04-02 21:47 |显示全部楼层
原帖由 Edengundam 于 2007-4-2 15:51 发表

恩.....我只能这样了..

  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) && printf("%d\n", i);
复制代码


错了,应该是这样:


  1. return (N >= i) && printf("%d\n", i) && (N > i) && p(i + 1, N) & printf("%d\n", i);
复制代码


最后一个printf前应该是&,否则每次p(i + 1, N)返回的都是假,这样&&运算符短路,不会执行最后的printf了,也就无法输出6.....1了

论坛徽章:
0
2 [报告]
发表于 2007-04-03 09:15 |显示全部楼层
原帖由 lee2008 于 2007-4-3 08:28 发表




怎么就是没看懂,后半部分的6 5 4 3 2 1 是怎么生成的啊?





典型的递归,还是用p(1,7)来说
当i= 6时,调用p(7,7),递归进入p,这时(N > i)为假,返回假,回到p(6,7),这时i = 6,然后执行最后的printf("%d\n", i),打印出6,类推得到5.....1
流程:
p(1,7)
p(2,7)
  ....
  p(7,7)
p(6,7)
...
p(1,7)

论坛徽章:
0
3 [报告]
发表于 2007-04-03 11:03 |显示全部楼层
原帖由 lee2008 于 2007-4-3 09:45 发表




我就是这里没搞明白, 怎么回到p(6,7)的?  i是如何自减的啊?


晕,当然是通过return返回的了,建议你研究一下递归的原理就能明了了
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP