免费注册 查看新帖 |

Chinaunix

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

[C] c语言一个递归的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-06 18:51 |只看该作者 |倒序浏览
本帖最后由 lhl161123 于 2013-06-06 18:53 编辑

题目:编写一个递归版本的itoa函数,即通过递归调用把整数转换为字符串。
#include <stdio.h>
#include <math.h>

void itoa(int n, char s[])
{
      static int i;
      if (n / 10)
           itoa(n / 10, s);
      else {
           i = 0;
           if (n < 0)
                s[i++] = '-';
      }
      s[i++] = abs(n) % 10 + '0';
      s = '\0';
}

main()
{
      char s[10];
      itoa(189271, s);
      printf("%s\n", s);
      itoa(-9012398, s);
      printf("%s\n", s);
}

首先 网上找的答案 程序是可以得到想要的结果 只是不明白
请问高手void itoa(int n, char s[])函数的流程,我不理解为什么运行到函数最后's='\0'; }'不退出函数,反而跳到 ‘itoa(n / 10, s); ’ 然后继续执行;还有n的值为什么经过‘if (n / 10) itoa(n / 10, s); ' 递归后不是只剩下传进来前的高位的数字吗?怎么还可以还原?

论坛徽章:
4
白羊座
日期:2013-09-17 21:59:30技术图书徽章
日期:2013-10-12 22:16:03白羊座
日期:2013-10-14 11:01:40双子座
日期:2013-12-17 18:26:39
2 [报告]
发表于 2013-06-06 19:14 |只看该作者
你确定程序没问题?
  1. s = '\0';
复制代码
应当为
  1. s[i] = '\0';
复制代码
还有他这个实现不是多线程安全的。

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
3 [报告]
发表于 2013-06-06 22:13 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
4 [报告]
发表于 2013-06-06 22:16 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
5 [报告]
发表于 2013-06-08 11:14 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽

论坛徽章:
2
程序设计版块每日发帖之星
日期:2015-06-17 22:20:00每日论坛发贴之星
日期:2015-06-17 22:20:00
6 [报告]
发表于 2013-06-08 12:47 |只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP