为什么我的递归在Swift中工作,而在Python中不工作?
我是一个母语很快的人,很难理解为什么我的算法在翻译成Python时不起作用 在Python中运行时,它从不将x或y值重置为零。例如,输入4应该给出(2,0),但在python版本中它返回(2,1) 这里是Swift:为什么我的递归在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){ 如果指数
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)的注释相关
;这将正确执行整数除法(如/
)。