2011-01-09 62 views
1

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

例子:猫(12,13)返回1213

我知道如何做到这一点的迭代的方式,这将是这样的:

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

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

    return num1 + num2; 
} 

但是当我使用递归我能” t使用临时变量来计算数字,如果使用参数I将失去它的值。

+4

如果你要正确对待这些数字作为字符串,然后使用字符串。 “连接”不是**,而是整数。首先,“整数”是一个概念,与数字表示的方式分开存在。不管你写什么基地,或者如果你用13个理货标记来代表它,或者画一个完整的符号,你就会说代表那个价值,“十三”是一样的。 – 2011-01-09 21:17:35

+1

为什么你需要递归编写它?这是功课吗?什么语言?你试过什么了? – templatetypedef 2011-01-09 21:19:20

回答

0

你在用什么语言?你可以简单地将它们转换为字符串并将它们连接起来。

0

我不确定你是否从事这项练习作为家庭作业 - 在这种情况下,我即将说的话可能不适合你。

不过,假设你不会你的功课问题重新发布在网络上,你只需要得到这个工作,你简单地认为:

  • 两个整数组合成一个字符串的函数入口
  • 铸造回的整数在函数出口

例如(在Java中的伪代码)

int cat(int x, int y) { 
String s = x+""+y; 
return Integer.parseInt(s); 
} 
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) 
} 
0

编纂什么MrGlass说,为什么不使用此代码:

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

    return Integer.parseInt(s1+s2); 
} 

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); 
} 
0

为什么要用递归呢?

代码在python:

from math import log 
def concat(a,b): 
    return a * 10 ** int(log(b,10)+1) + b 
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); 
    } 
} 
1

这不是一个“现实生活”的任务,是吗?反正这里是我的主张(递归并没有第三个参数)

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

这是怎么回事就已经解决方案:

(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; 
}