2 int를 추가하고 재귀를 요구하는 할당을하고 있습니다. 아래는 내 코드이지만 내 출력은 항상 답보다 10 이상입니다. 왜? 내 초기 캐리는 0입니다.
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;
}
}
프로그램 을 직접 따라 가면 분명합니다 . add (8, 7, 0)를 따르십시오.
오류는 여기에 있습니다. 캐리를 올바르게 추가했지만 합계의 mod 만 사용하지 않았기 때문에 15 대신 25를 얻습니다. ((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 기반 작업을 시뮬레이션하기 때문에 실제 코드에서는 끔찍할 것입니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다