2016-11-15 1 views
0

나는 2 int를 추가해야하고, 재귀를해야한다는 임무를 수행하고있다. 아래 코드는 내 코드이지만 출력은 항상 10 개 이상입니다. 왜? 내 초기 캐리 0캐리와 재귀 적으로 2 개의 정수를 더한다.

int add(int n1,int n2,int carry){ 

    if(n1>0){ 

     if(carry == 1) 
      n1= n1+1; 

     if((n1%10+n2%10)>9) 
      return n1%10 + n2%10 + 10*add(n1/10,n2/10,1); 
     else  
      return n1%10 + n2%10 + 10*add(n1/10,n2/10,0); 

    } 

    else{ 
     return 0; 
    } 
} 
+0

나는 결과가 나에게 2008 준 999 및 999를 추가하는 시도 ... 캐리가있을 때마다 아, 네 – Jason

답변

1

당신이 손 프로그램에 의해 을 따른다면 그것은 분명하다. 의 추가 팔로우하자 (8, 7, 0) :

  • 캐리는 0입니다 : 확인 우리가 캐리 반환 8 + 7이있을 것이다 : 10 = 15> 9
  • N1 % 10 + N2 %를 아무 + 10 * add (0, 0, 1)!

여기에 오류가 있습니다. 캐리를 올바르게 추가 했으므로 15 대신 25를 얻지 만 합계의 mod 만 사용하지 마십시오. ((8 + 7) % 10) + 10 * add이어야합니다. (0, 0, 1)

그래서 코드가되어야 :

... 
if((n1%10+n2%10)>9) { 
    return ((n1%10 + n2%10) % 10) + 10*add(n1/10,n2/10,1); 
} 
else { 
    ... 

하지만이 코드는 학술 목적으로 의미가 있습니다. 실제 코드에서 끔찍할 것입니다. 왜냐하면 32 비트 (또는 그 이상) 프로세서에서 10 기반 연산을 시뮬레이트하기 때문입니다 ...

+0

나타나는 부가 (10)이있을 것 같다 참여! 고맙습니다!! 네, 내 결승입니다 ... – Jason

+0

@ Jason. 작동하는 경우, 향후 독자를 위해 답변을 수락해야합니다. 이것은 SO가 작동하는 방식입니다 :-) –

-1

희망이 있습니다.

#include <stdio.h>  
int add(int n1,int n2) 
{ 
     if(n2==0) 
       return; 

     int carry = n1&n2; 
     n1 = n1^n2; 
     n2 = carry<<1; 
     add(n1,n2); 
} 
int main() 
{ 
     printf("%d\n",add(29,16)); 
     return 0; 
} 
관련 문제