def recur(a):
if( (a/2)!=0):
return recur(a/2) * 10+a%2
else:
return 1
c=recur(10)
print(c)
내가이 코드를 실행할 때 inf가 인쇄됩니다. 누구나 내 잘못 과이 코드를 설명 할 수 있습니까? (이 코드를 C에서 python으로 변환했습니다. 원본 코드는 아래와 같습니다)
#include <stdio.h>
int recur(int n)
{
if((n/2)!=0)
return (recur(n/2)*10+n%2);
else
return 1;
}
int main()
{ int d;
d=recur(10);
printf("%d",d);
return 0;
}
출력 1010
댓글에있는 질문에 답하면 다음 1010
과 같은 결과 를 얻을 수 있습니다.
recur의 실행을 추적 해 보겠습니다.
recur( 10 )
return recur( 5 ) * 10 + 10 % 2 ---------+
return recur( 2 ) * 10 + 5 % 2 ------+ |
return recur( 1 ) * 10 + 2 % 2 --+ | |
return 1 | | |
1 * 10 + 2 % 2 == 10 + 0 == 10 <-+ | |
10 * 10 + 5 % 2 == 100 + 1 == 101 <--+ |
101 * 10 + 10 % 2 == 1010 + 0 == 1010 <--+
IOW,의 결과를 계산하기 위해 , 또는 recur(10)
의 결과를 계산하고 에를 곱하고 ( ) 의 결과를 더합니다 .recur(10/2)
recur(5)
10
10 % 2
0
의 결과를 계산하기 위해 , 또는 recur(5)
의 결과를 계산하고 여기 에를 곱하고 ( ) 의 결과를 더합니다 .recur(5/2)
recur(2)
10
5 % 2
1
의 결과를 계산하기 위해 , 또는 recur(2)
의 결과를 계산하고 여기 에를 곱하고 ( ) 의 결과를 더합니다 .recur(2/2)
recur(1)
10
2 % 2
0
1/2 == 0
이므로의 결과는 recur(1)
입니다 1
. 1 * 10 + 2 % 2
인 10
,의 결과이므로 recur(2)
IS 10
. 10 * 10 + 5 % 2
인 101
,의 결과이므로 recur(5)
IS 101
. 그리고 마지막으로의 결과는 101 * 10 + 10 % 2
입니다 1010
. 그래서 그것은의 결과입니다 recur(10)
.
C에서, 분할 수율은 정수 결과 정수이므로 1/2 == 0
, 5/2 == 2
등
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다