免费注册 查看新帖 |

Chinaunix

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

如何利用递归方法实现把数组a[]的前k个元素倒序。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-29 12:57 |只看该作者 |倒序浏览
请教 :
   如何利用递归方法实现把数组a[]的前k个元素倒序。

论坛徽章:
0
2 [报告]
发表于 2007-10-29 13:45 |只看该作者

  1. #include<stdio.h>
  2. void swap(int *a, int *b)
  3. {
  4.         int c = *a;
  5.         *a = *b;
  6.         *b = c;
  7. }
  8. void dao(int *a, int i, int k)
  9. {
  10.         if (i >= k)
  11.                 return ;
  12.         else
  13.         {
  14.                 swap(&a[i], &a[k-1]);
  15.                 dao(a, i+1, k-1);
  16.         }
  17. }

  18. int main()
  19. {
  20.         int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
  21.         int i;
  22.         printf("before\n");
  23.         for (i = 0; i < 9; i++)
  24.                 printf("a[%d]=%d ", i, a[i]);
  25.         dao(a, 0, 9);
  26.         printf("\n");
  27.         printf("after\n");
  28.         for (i = 0; i < 9; i++)
  29.                 printf("a[%d]=%d ", i, a[i]);
  30.         printf("\n");
  31.    
复制代码

[ 本帖最后由 scutan 于 2007-10-29 14:07 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2007-10-29 15:58 |只看该作者

回复 #1 pcmpcmpcm 的帖子


  1. #include <stdio.h>
  2. #include <assert.h>

  3. #define ARY_LEN(x) (sizeof(x) / sizeof((x)[0]))

  4. int reverse(int ary[], int count)
  5. {
  6.     int tmp;

  7.         assert(ary != NULL);

  8.     if (count > 1) {
  9.         tmp = ary[count - 1];
  10.         ary[count - 1] = ary[0];
  11.         ary[0] = tmp;
  12.         reverse(ary + 1, count - 2);
  13.     }

  14.         return 0;
  15. }

  16. void printary(int ary[], int count)
  17. {
  18.     int i;

  19.     assert(ary != NULL);

  20.     for (i = 0; i < count; i++)
  21.         fprintf(stdout, "%d\t", ary[i]);

  22.     fprintf(stdout, "\n");
  23. }

  24. int main(void)
  25. {
  26.     int ary[] = {1, 2, 3, 4, 5};

  27.     fprintf(stdout, "before reverse:\n");
  28.     printary(ary, ARY_LEN(ary));

  29.     reverse(ary, ARY_LEN(ary));

  30.     fprintf(stdout, "after reverse:\n");
  31.     printary(ary, ARY_LEN(ary));

  32.     return 0;
  33. }
复制代码

论坛徽章:
0
4 [报告]
发表于 2007-10-30 14:03 |只看该作者
多谢指教,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP