您好,欢迎来到[编程问答]网站首页   源码下载   电子书籍   软件下载   专题
当前位置:首页 >> 编程问答 >> C/C++ >> 请教一个递归函数的问题

请教一个递归函数的问题

来源:网络整理     时间:2016/7/24 5:49:02     关键词:

关于网友提出的“ 请教一个递归函数的问题”问题疑问,本网通过在网上对“ 请教一个递归函数的问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:

问题: 请教一个递归函数的问题
描述:

#include 
char *utoa(unsigned value, char *digits, int base)
{
    char *s, *p;
    s = "0123456789abcdefghijklmnopqrstuvwxyz"; 
    if (base == 0)
        base = 10;
    if (digits == NULL || base < 2 || base > 36)
        return NULL;
    if (value < (unsigned) base) {
        digits[0] = s[value];
        digits[1] = '\0';
    } else {
        for (p = utoa(value / ((unsigned)base), digits, base);
             *p;
             p++);
        utoa( value % ((unsigned)base), p, base);
    }
    return digits;
}   
char *itoa(int value, char *digits, int base)
{
    char *d;
    unsigned u; 
    d = digits;
    if (base == 0)
        base = 10;
    if (digits == NULL || base < 2 || base > 36)
        return NULL;
    if (value < 0) {
        *d++ = '-';
        u = -value;
    } else
        u = value;
    utoa(u, d, base);
    return digits;
}
请各位大牛帮忙看看这段代码,函数itoa中char *d是指针还是一个char数组?它与传进来的digits是不是同一地址?
函数utoa中变量p是如何控制那个for循环的递归的?


解决方案1:

1 .d = digits; 
这个是由程序员控制的,看你自己使用itoa的时候传的什么进来,
不过不论什么情况下都要要保证内存足够大
2. 这个递归思想就是 先把商求出,然后加上余数,若不递归,则求出的是反序,
for (p = utoa(value / ((unsigned)base), digits, base);  *p;   p++); 
注意for循环后有个;符号, 表示空语句
条件是*p,即商为空的时候
比如: value=21 base=10
  1.  utoa(21/10) --> utoa(2) -->  
                                                if (value < (unsigned) base) {
                                                digits[0] = s[value];
                                                digits[1] = '\0'; 

此时p[0]='2',p[1]='\0' ;(for 的初始化)
然后执行空语句,
递增:p++
再判断:*p就为0了,退出最内存递归调用的for,执行utoa( value % ((unsigned)base), p, base); 
建议单步调试一下
若不用递归,结果是反的

char *
itoa(int value, char *string, int radix)
{
  char tmp[33];
  char *tp = tmp;
  int i;
  unsigned v;
  int sign;
  char *sp;
  if (radix > 36 || radix <= 1)
  {
    errno = EDOM;
    return 0;
  }
  sign = (radix == 10 && value < 0);
  if (sign)
    v = -value;
  else
    v = (unsigned)value;
  while (v || tp == tmp)
  {
    i = v % radix;
    v = v / radix;
    if (i < 10)
      *tp++ = i+'0';
    else
      *tp++ = i + 'a' - 10;
  }
  if (string == 0)
    string = (char *)malloc((tp-tmp)+sign+1);
  sp = string;
  if (sign)
    *sp++ = '-';
  while (tp > tmp)
    *sp++ = *--tp;
  *sp = 0;
  return string;
}

ps: 你这个代码是哪里来的?
以上介绍了“ 请教一个递归函数的问题”的问题解答,希望对有需要的网友有所帮助。
本文网址链接:http://www.codes51.com/itwd/2878348.html

相关图片

相关文章