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
答案 0 :(得分:8)
Python 3中的除法运算符/
是浮点除法,因此循环将永远运行。用//
代替并感到高兴。
答案 1 :(得分:1)
在评论中回答问题,这是如何获得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
,然后加上{{ 1}}(10 % 2
)。
要计算0
的结果,我们计算recur(5)
或recur(5/2)
的结果,将其乘以recur(2)
,然后将{{1} }(10
。
要计算5 % 2
的结果,我们计算1
或recur(2)
的结果,将其乘以recur(2/2)
,然后将{{1} }(recur(1)
。
10
,因此2 % 2
的结果为0
。 1/2 == 0
为recur(1)
,因此1
的结果为1 * 10 + 2 % 2
。 10
为recur(2)
,因此10
的结果为10 * 10 + 5 % 2
。最后,101
的结果是recur(5)
,所以这就是101
的结果。
在C中,整数除法会产生整数结果,因此101 * 10 + 10 % 2
,1010
等。