递归地连接两个整数

时间:2011-01-09 21:14:23

标签: c string recursion

我需要编写一个函数,它接收两个正整数并将它们连接起来。

示例:Cat(12,13)返回1213

我知道如何以迭代方式执行此操作,它将是这样的:

int Cat(int num1, int num2)
{
     int temp = num2;

     while (temp > 0)
     {
         num1 *= 10;
         temp /= 10;
     }

     return num1 + num2;
}

但是当我使用递归时,我不能使用将用于计算数字的临时变量,如果使用参数,我将失去其值。

9 个答案:

答案 0 :(得分:1)

您可以添加第三个参数作为一种计数器:

int Cat2(int num1, int num2, int x)
{
     if (x == 0) 
     {
         return num1 + num2;
     }
     else 
     {
         return Cat(num1 * 10, num2, x / 10);
     }
}

int Cat(int num1, int num2)
{
     Cat2(num1, num2, num2)
}

答案 1 :(得分:1)

你需要你的递归例程一次处理一个数字,所以调用链看起来像这样:

Cat(12, 13)
Cat(121, 3)
Cat(1213, 0) <- at this point the recursion terminates, since num2 == 0

所以你的功能看起来像这样:

int Cat(int num1, int num2)
{
    if (num2 == 0)
    {
        return num1;
    }
    else
    {
        // remove most significant digit from num2 and
        // append it to num1
        return Cat(num1, num2);
    }
}

答案 2 :(得分:1)

这不是“现实生活”的任务,是吗?无论如何这里是我的命题(递归,没有第三个参数)

int Cat(int num1, int num2)
{
    if(num2 > 0)
    {
        num1 = Cat(num1*10,num2/10);
    }
    return num1 - num2/10 + num2;
}

答案 3 :(得分:0)

您使用的是哪种语言?你可以简单地将它们作为字符串转换并以这种方式连接它们。

答案 4 :(得分:0)

我不确定你是否参与这项运动作为家庭作业 - 在这种情况下,我要说的可能不适合你。

但是假设你不会将你的家庭作业问题重新发布到网上而你只需要做到这一点,你有没有考虑过:

  • 将两个整数组合成函数条目
  • 上的字符串
  • 将其强制转换为函数出口
  • 上的整数
例如

(在Java伪代码中)

int cat(int x, int y) {
 String s = x+""+y;
 return Integer.parseInt(s);
}

答案 5 :(得分:0)

为了编写MrGlass所说的内容,为什么不使用这段代码:

int Cat(int n1, int n2){
    String s1 = Integer.toString(n1);
    String s2 = Integer.toString(n2);

    return Integer.parseInt(s1+s2);
}

答案 6 :(得分:0)

int do_cat(int num1, int num2, int temp)
{
    return temp? do_cat(num1 * 10, num2, temp / 10): num1 + num2;
}

int cat(int num1, int num2)
{
    return do_cat(num1, num2, num1);
}

答案 7 :(得分:0)

为什么还要用递归呢?

python中的代码:

from math import log
def concat(a,b):
    return a * 10 ** int(log(b,10)+1) + b

答案 8 :(得分:0)

这是如何在Scheme中解决的:

(define (Cat num1 num2)
    (define (CatLoop num1 num2 temp)
            (if (= temp 0)
                (+ num1 num2)
                (CatLoop (* num1 10) num2 (/ temp 10))))
    (CatLoop num1 num2 num2))

[它可能包含语法错误,我没有测试它。]

使用嵌套函数的类C语言:

int Cat(int num1, int num2) {
    int CatLoop(int num1, int num2, int temp) {
        if (temp == 0)
            return num1 + num2;
        else
            return CatLoop(num1 * 10, num2, temp / 10);
    }

    return CatLoop(num1, num2, num2);
}

在尾部调用优化之后,将其展开到以下内容中:

int Cat(int num1, int num2) {
    int temp = num2;
    // goto CatLoop;

    CatLoop:
    if (temp == 0)
        goto Done;

    Else:
    num1 *= 10;
    temp /= 10;
    goto CatLoop;

    Done:
    return num1 + num2;
}
相关问题