一个递归算法

来源:互联网 发布:网络40禁书百度 编辑:程序博客网 时间:2024/06/06 01:54

这是为了铭记如何把代码写的漂亮。敬大神~


我最终想要得到的效果是这样的:‘

水心病 latin_name 糖化病

水心病 latin_name 蜜果病

水心病 symptoms harm plants 果心

水心病 symptoms harm plants 果面

等等

这个的思想利用动态规划来做,我们需要在判断类型的前提下来进行递归,一直找到最终的Value值,然后把当前Value值所在的路径,也就是k值记录下来。这是大神写的python代码,我要多多鞭策自己!!因为要统一编码为unicode在写入的时候.encode('utf-8')转为str写入文档,所有当我们遍历到值的所在节点的时候,实际上就是unicode类型,对其他非unicode类型的value值也统一转换为unicode类型。

def node_to_list(node, hypothesis, prefix=u''):    if isinstance(node, int):        node = unicode(node)    if isinstance(node, unicode):        node = node.replace(u',', u'COMMA')        pstr(print_pattern.format(prefix, node, hypothesis))        return    elif isinstance(node, list):        if len(node) == 0:            return        for item in node:            node_to_list(item, hypothesis, prefix)    elif isinstance(node, dict):        if len(node) == 0:            return        for key in node:            new_prefix = prefix + delimiter + key            node_to_list(node[key], hypothesis, new_prefix)    else:        pstr(u'unexpected type: {}'.format(type(node)))
我觉得之所以能成功的递归,关键在于递归的每一层究竟是什么在变化,这里的node,prefix的参数设置很重要,当出现字典这种情况,改变prefix就能正常的进行递归了,递归的参数设置很重要,很重要,很重要啊

0 0