2011-01-09 40 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; 
}