我有一个函数,它检查给定的两个节点链,并确定这两个节点链是否以相同的顺序包含相同的数据值。函数返回True,否则返回False。我需要使用递归来编写这个函数。
这是我的尝试:
def check_chains(chain1, chain2):
if chain1 is None or chain2 is None:
return False
else:
if chain1.get_data() == chain2.get_data():
check_chains(chain1.get_next(), chain2.get_next())
return True
else:
return False
即使节点链中有不同的数据值,这个函数也会返回True。
下面是一些测试用例:
1. Test case 1 (test passed)
chain1 = N.node(5 ,N.node(10,N.node(-15, N.node(1))))
chain2 = N.node(5 ,N.node(10,N.node(-15, N.node(1))))
expected = True
result = a7q8.check_chains(chain1, chain2)
if result!=expected:
print('Test failed')
2. test 2 (test failed, expected false but returned True)
chain1 = N.node(5 ,N.node(10,N.node(-15, N.node(1))))
chain2 = N.node(5 ,N.node(10,N.node(7, N.node(1))))
expected = True
result = a7q8.check_chains(chain1, chain2)
if result!=expected:
print('Test failed')
发布于 2021-07-21 13:14:21
你的逻辑在两个地方有一点缺陷:
def check_chains(chain1, chain2):
# base case for equality was missing!
if chain1 is chain2 is None:
return True
if None in (chain1, chain2): # rewrote your condition less verbosely
return False
if chain1.get_data() == chain2.get_data():
# recursive result was never used!
return check_chains(chain1.get_next(), chain2.get_next())
return False
我还删除了一些虚假的else
,因为您从每个if
-block返回。
发布于 2021-07-21 13:17:26
def check_chains(chain1, chain2):
if chain1 is None and chain2 is None:
return True
if chain1 is None or chain2 is None:
return False
else:
if chain1.get_data() == chain2.get_data():
return check_chains(chain1.get_next(), chain2.get_next())
else:
return False
https://stackoverflow.com/questions/68470108
复制相似问题