You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Recursion开发Ping/Tracert模拟器时路径拼接异常问题求助

问题原因定位
  • 核心问题1:递归层级未正确返回拼接完成的路径。子递归返回有效路径后,当前层级没有将拼接好的path作为返回值返回,反而在函数末尾统一返回了空字符串'',导致上层拼接路径时拿到的是空值,最终最外层的facebook.com后面拼接了空内容,出现facebook.com/的错误输出。
  • 核心问题2:缺少递归短路逻辑。找到匹配目标的路径后,没有直接终止遍历返回结果,函数会继续遍历完所有连接后才执行末尾的return '',丢失了已经拼接好的正确路径。
修复后的代码实现
# 初始化连接列表
connection_list = []
connection_list.append(('facebook.com', 'google.com'))
connection_list.append(('google.com', 'instagram.com'))
connection_list.append(('instagram.com', 'example2.com'))

# 访问标记列表,每次调用前清空避免历史数据干扰
visited_list = []

def ping(origin, destination):
    path = origin
    for connect in connection_list:
        if origin in connect:
            # 找到直达目标的连接,直接拼接返回
            if destination in connect:
                print('Ping to server', destination, 'success')
                visited_list.append((origin, connect[1]))
                path = path + '/' + connect[1]
                return path
            # 未访问过的连接,递归向下查找
            if connect not in visited_list:
                visited_list.append(connect)
                # 确定下一跳节点
                next_node = connect[1] if connect[0] == origin else connect[0]
                sub_path = ping(next_node, destination)
                # 子递归返回有效路径,拼接后直接返回,终止后续遍历
                if sub_path:
                    path = path + '/' + sub_path
                    return path
    # 无有效路径时返回空
    return ''
调用测试
visited_list = []
result = ping('facebook.com', 'example2.com')
print(result)
输出结果
Ping to server example2.com success
facebook.com/google.com/instagram.com/example2.com

注:如果需要多次调用ping函数,建议将visited_list改为函数参数传递,避免全局变量残留的历史访问标记影响后续调用结果。

内容的提问来源于stack exchange,提问作者ThangTu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 05:36:03