3

我昨天考试时遇到了这个问题。我无法解决它,所以你可以想象结果......

创建一个递归函数:int invertint( int num)将接收一个整数并将其返回但反转,例如:321将返回为123

我写了这个:

int invertint( int num ) {
  int rest = num % 10;
  int div = num / 10;
  if( div == 0 ) {
     return( rest );
  }
  return( rest * 10 + invert( div ) )
}

适用于 2 位数字,但不适用于 3 位或更多位。因为321在最后阶段会返回1 * 10 + 23

非常感谢!

PS:有没有办法以更快的方式理解这些递归问题,或者这取决于自己的想象?

4

7 回答 7

3
int invertint( int num ) {
  int i ;

  for(i=10;num/i;i*=10);
  i/=10;
  if(i == 1) return num;
  return( (num % 10) * i + invertint( num / 10 ) );
}
于 2012-07-05T15:19:21.940 回答
1

您的错误是在最后一条语句中您rest乘以10. 为什么只有10?您需要将数字移动与rest数字剩余部分中剩余的数字一样多的数字。你只移动了 1。难怪它只适用于 2 位数字。

最后一部分应该按照

int tail = invert( div );
int deg = /* number of digits in `tail` */;
return rest * (int) pow(10, deg) + div;
于 2012-07-05T15:09:38.997 回答
0
int reverse(int no,int rev)
{
if(no!=0)
return reverse(no/10,rev*10+no%10);
else
return rev;
}

将此方法称为reverse(numberToReverse,0)

于 2012-07-05T15:03:33.430 回答
0

作为替代方案,这可以在没有递归的情况下完成。

    int invertint(int num)
    {
        int res = 0;
        while (num != 0)
        {                
            res = res * 10 + (num % 10);
            num /= 10;
        }
        return res;
    }

但是由于递归是分配,给定 int(int) 签名,最简单的方法是使用 pow(log10)) 变体(前提是您被允许包含 math.h ?)

    int invertint(int num)
    {
        if (num == 0) return 0;
        return invertint(num / 10)  +  (int)pow(10, (int)log10(num)) * (num % 10);
    }
于 2012-07-05T15:04:27.907 回答
0

如果你用另一种方式做,你就不需要柜台了。

int invertint(int num)
{
    if (0 == num || 0 == num % 10) {
        return num / 10;
    }
    int digits = floor(log10(num)) + 1;
    int modulus = pow(10, digits - 1);
    return invertint(num % modulus) * 10 + num / modulus;
}

请注意,这并不像我最初想象的那么简单——我必须使用数学。

于 2012-07-05T15:04:58.297 回答
0

问题出在return(rest * 10 + invert(div)). 你不能自己做乘法。该因素取决于函数递归的次数,因此您必须提供进位作为函数的第二个参数(进位初始化为 0)

于 2012-07-05T15:05:09.887 回答
-1

这是最简单的方法。

int sum=0;
int reverse(int n)
{
    if(n>0)
    {
        sum=(sum*10)+(n%10);
        reverse(n/10);
    }
    return sum;
}
于 2017-06-09T12:50:11.733 回答