免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2084 | 回复: 2
打印 上一主题 下一主题

[函数] 不同编译器编译递规函数的不同! [复制链接]

论坛徽章:
1
15-16赛季CBA联赛之四川
日期:2016-02-15 17:12:32
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-03-03 14:18 |只看该作者 |倒序浏览

  1. int bsearch(int a[],int left,int right,int key)
  2. {
  3. int mid=(left+right)/2;
  4. if (a[mid]<key)
  5. bsearch(a,mid+1,right,key);
  6. //return bsearch(a,mid+1,right,key);
  7. elseif (a[mid]>key)
  8. bsearch(a,left,mid-1,key);
  9. //return bsearch(a,left,mid-1,key);
  10. else
  11. return mid;
  12. }
复制代码

1.linux gcc 编译后运行结果错, 但是用注释的代码就正确,是否因为编译器严格的原因?
2.AIX xlc 编译后运行结果正确

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
2 [报告]
发表于 2007-03-03 14:40 |只看该作者
注释外的代码怎么可能正确?
另:C没有elseif关键字;LZ的代码缺少不存在时的退出条件。

  1. int bsearch(int a[], int left, int right, int key){
  2.         int mid;

  3.         if(left > right){
  4.                 return -1;
  5.         }
  6.         mid = (left + right)/2;
  7.         if(key > a[mid]){
  8.                 return bsearch(a, mid + 1, right, key);
  9.         }else if(key < a[mid]){
  10.                 return bsearch(a, left, mid - 1, key);
  11.         }
  12.         return mid;
  13. }

  14. #define ALEN(a) (sizeof(a)/sizeof((a)[0]))

  15. #include <stdio.h>

  16. int main(void){
  17.         int a[] = {
  18.                 10,
  19.                 11,
  20.                 30,
  21.                 50,
  22.                 80,
  23.                 99
  24.         };

  25.         int n;
  26.         int i;

  27.         printf("array:");
  28.         for(i = 0; i < ALEN(a); i++){
  29.                 printf(" %d", a[i]);
  30.         }
  31.         printf("\n");
  32.         n = 10;
  33.         i = bsearch(a, 0, ALEN(a) - 1, n);
  34.         printf("search %d at index %d of the array\n", n, i);
  35.         n = 99;
  36.         i = bsearch(a, 0, ALEN(a) - 1, n);
  37.         printf("search %d at index %d of the array\n", n, i);
  38.         n = 50;
  39.         i = bsearch(a, 0, ALEN(a) - 1, n);
  40.         printf("search %d at index %d of the array\n", n, i);
  41.         n = 3;
  42.         i = bsearch(a, 0, ALEN(a) - 1, n);
  43.         printf("search %d at index %d of the array\n", n, i);
  44.         return 0;
  45. }
复制代码

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
3 [报告]
发表于 2007-03-03 14:50 |只看该作者
晕,还没搞懂怎么递归吧。
如果AIX下可用,可能正好编译器优化了之后使用寄存器正好传递了信息,只能说是运气,侥幸。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP