为什么我的递归在Swift中工作,而在Python中不工作?

为什么我的递归在Swift中工作,而在Python中不工作?,python,swift,recursion,Python,Swift,Recursion,我是一个母语很快的人,很难理解为什么我的算法在翻译成Python时不起作用 在Python中运行时,它从不将x或y值重置为零。例如,输入4应该给出(2,0),但在python版本中它返回(2,1) 这里是Swift: func位置(从索引:Int,gridSize:Int=32)->(x:Int,y:Int){ 如果指数

我是一个母语很快的人,很难理解为什么我的算法在翻译成Python时不起作用

在Python中运行时,它从不将x或y值重置为零。例如,输入4应该给出(2,0),但在python版本中它返回(2,1)

这里是Swift:

func位置(从索引:Int,gridSize:Int=32)->(x:Int,y:Int){
如果指数<0{
返回(-1,-1)
}
如果网格大小<1{
返回(0,0)
}
让localIndex=Int((浮点(索引)/浮点(网格大小*网格大小))*4)
设qx=localIndex%2
设qy=localIndex/2
设半网格=网格大小/2
var x=qx*半格线
变量y=qy*半格线
设nextIndex=Int(索引-localIndex*halfGrid*halfGrid)
let(nextX,nextY)=位置(from:nextIndex,gridSize:gridSize/2)
x+=nextX
y+=nextY
返回(x,y)
}
在Python中:

def posFromIndex(索引,网格):
如果指数<0:
返回-1,-1
如果网格<1:
返回0,0
localIndex=int((索引/浮点(网格*网格))*4)
qx=本地索引%2
qy=本地索引/2
hg=网格/2
x=qx*hg
y=qy*hg
nextIndex=int(索引-局部索引*hg*hg)
nextX,nextY=posFromIndex(nextIndex,grid/2)
x+=nextX
y+=nextY
打印(x,y)
返回整数(x),整数(y)

原因是,在Swift return integer中,这类整数除法
gridSize/2
,但在Python中
grid/2
返回浮点,即使
grid
是整数

如果要在Python中使用类似的整数除法,则需要使用
/
运算符

如果您纠正该错误(并为
网格
参数添加默认值),您将正确获得
4的输入的输出
(2,0)

def posFromIndex(索引,网格=32): 如果指数<0: 返回-1,-1 如果网格<1: 返回0,0 localIndex=int(索引/(网格*网格)*4) qx=本地索引%2 qy=localIndex//2 hg=grid//2 x=qx*hg y=qy*hg nextIndex=索引-局部索引*hg*hg nextX,nextY=posFromIndex(nextIndex,grid//2) x+=nextX y+=nextY 返回x,y 打印(索引(4))
输出:

(2,0)

请注意,您还可以通过从函数中删除大量不必要的强制转换来简化函数。

使用什么参数运行?您可以提供一个完整的示例吗?在python 3中整数除法是
/
。不确定这是否与您可以使用
qy,qx=divmod(localIndex,2)的注释相关
;这将正确执行整数除法(如
/
)。