# coding:utf-8
import numpy as np
def drop_water(y, x, array, path):
s1 = array[y + 1, x - 1] * 5 # 左下
s2 = array[y + 1, x] * 4 # 下
s3 = array[y + 1, x + 1] * 3 # 右下
s4 = array[y, x + 1] * 2 # 右
s5 = array[y, x - 1] * 1 # 左
l = [s1, s2, s3, s4, s5]
w = 4 if sum(l) in [0, 15] else max(l)
if w == 1:
next_s = [y, x - 1]
elif w == 2:
next_s = [y, x + 1]
elif w == 3:
next_s = [y + 1, x + 1]
elif w == 4:
next_s = [y + 1, x]
elif w == 5:
next_s = [y + 1, x - 1]
path.append(next_s)
if next_s[0] == array.shape[0] - 1:
print(path)
return path
else:
print('a')
drop_water(next_s[0], next_s[1], array, path)
print('w')
array = np.array([[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1,
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0,
1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 1,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0,
0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0,
0, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0,
1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1]])
s = drop_water(0, 30, array, [])
print(s)
输出如下:
a
a
[[1, 30], [2, 30], [3, 29]]
w
w
None
1
ericls 2018-10-26 20:14:56 +08:00 via iPhone
你没有 return 呀
|
6
awanabe 2018-10-26 20:21:32 +08:00
path 都没打印出来..说明没有走到 if 里面...
判断逻辑先看看吧... |
8
bucky 2018-10-26 20:23:11 +08:00
这个问题,王垠都说过了,if else 要成对出现,保证你的逻辑完整,要不然你都发现不了你的 bug 在哪里
|
11
omph 2018-10-26 20:24:53 +08:00
用调试走一遍都清楚了
|
15
Zzdex 2018-10-26 20:30:07 +08:00
递归不是你这么玩的
|
16
zsdroid 2018-10-26 20:32:24 +08:00
建议百度“递归”先
|
17
ysc3839 2018-10-26 20:34:52 +08:00 via Android
从输出能明显看出代码执行到了 else 里面,而你 else 里面没有 return。
|
18
zsdroid 2018-10-26 20:35:16 +08:00 1
第 1 次调用 drop_water,进入 else 打印 a
再次调用 drop_water (第 2 次),进入 else 打印再次 a 再次调用 drop_water (第 3 次),进入 if 打印 path 打印第 2 次调用的 w 打印第 1 次调用的 w 然后没有 return 所以最后输出 none |
20
awanabe 2018-10-26 20:43:19 +08:00
递归最后一次走到 else 里面...
|
21
Hombin 2018-10-27 11:15:58 +08:00
else:
print('a') p = drop_water(next_s[0], next_s[1], array, path) print('w') return p 增加一个返回应该就可以了~ |