python递归计数_python – 递归函数中的计数器

我是python和编程的新手.我编写了一个函数,它将搜索数组中的相邻元素,并寻找值相互之间0.05的值,就像泛光填充算法一样.唯一的区别是我在计算函数运行的时间时做了一些愚蠢的事情(我想这也会告诉我我发现了多少元素),所以我的计数器值是错误的.代码在找到彼此相差0.05的相邻元素时起作用,只是计数很有趣.

def floodcount (x,y,array,value,count=0): #akin to a bucket fill in paint, finds the area instead

nrows = len(array)-1 #rows of the image

ncols = len(array[0])-1 #columns of the image

diff = array[x][y] - value

if (diff < 0.00) or (diff > 0.05): # the base case, finding a diff more than 0.05 or less than 0 is like finding a boundary

return 0

count = count +1

print 'count1 ',count

array[x][y] = -5 # so we do no calculate this pixel again

#print "[",x,",",y,"]"

if x > 0:

#print '1'# if not the first elemnet then can go back, this makes sure that x is within the array all the time

floodcount (x-1,y,array,value,count)

if y > 0:

#print '2'

floodcount (x,y-1,array,value,count)

if x < nrows:

#print '3'

floodcount (x+1,y,array,value,count)

if y < ncols:

#print '4'

floodcount (x,y+1,array,value,count)

if x > 0 and y > 0:

#print '5'

floodcount (x-1,y-1,array,value,count)

if x < nrows and y < ncols:

#print '6'

floodcount (x+1,y+1,array,value,count)

if x 0:

#print '7'

floodcount (x+1,y-1,array,value,count)

if x > 0 and y < ncols:

#print '8'

floodcount (x-1,y+1,array,value,count)

print 'count2 ',count

return count

所以对于测试用例

array = [[5,1,1,3,4],[4,5,6,2,5],[5,8,5,5,9]]

x = 0且y = 0

OUTPUT

count1 1

count1 2

count1 3

count1 4

count1 5

count2 5

count2 4

count2 3

count1 3

count2 3

count2 2

count2 1

你可以看到有些东西是可疑的:P

谁能指出我做错了什么?任何帮助,将不胜感激.

解决方法:

除了现在解决的计数问题:

您可以通过每次执行所有递归调用来减少if语句的数量,只需在函数开头检查数组边框,如果x< 0或y <0 0或x> nrows或y> NCOLS.

#akin to a bucket fill in paint, finds the area instead

def floodcount (x,y,array,value,count=0):

nrows = len(array)-1 #rows of the image

ncols = len(array[0])-1 #columns of the image

if x < 0 or y < 0 or x > nrows or y > ncols:

return count

diff = array[x][y] - value

# the base case, finding a diff more than 0.05 or less than 0 is like finding a boundary

if (diff < 0.00) or (diff > 0.05):

return count

count = count +1

print 'count1 ',count

array[x][y] = -5 # so we do no calculate this pixel again

#print "[",x,",",y,"]"

count = floodcount (x-1,y,array,value,count)

count = floodcount (x,y+1,array,value,count)

count = floodcount (x+1,y,array,value,count)

count = floodcount (x,y-1,array,value,count)

count = floodcount (x-1,y-1,array,value,count)

count = floodcount (x+1,y+1,array,value,count)

count = floodcount (x+1,y-1,array,value,count)

count = floodcount (x-1,y+1,array,value,count)

print 'count2 ',count

return count

标签:python,recursion

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值