将递归函数分配给python中的变量
Posted
技术标签:
【中文标题】将递归函数分配给python中的变量【英文标题】:Assigning recursive function to a variable in python 【发布时间】:2015-02-09 10:55:42 【问题描述】:我正在用 Python 编码一棵 Huffman 树。我有一个常规函数,它接收要编码的字符串和霍夫曼树。它创建一个字符串字符数组和一个空数组,其条目将是对应于每个字符的二进制路径。这个函数循环遍历字符串数组中的每个字符,调用函数 2,它递归地搜索树,构建二进制代码并在找到字母后返回它。
一切正常 - 递归函数在树中正确移动,找到并打印正确的路径。唯一的问题是,当我将该返回值分配给 function1 中的一个变量并将其附加到二进制数组时,它变为None
。您不能将递归返回语句分配给这样的变量吗?任何帮助将不胜感激,因为我觉得我即将完成这项工作。
这是我的代码:
def huffmanEncoder(s, t): """用树 t 编码字符串 s""" s = 列表 乙 = [] 对于我在范围内(len(s)): val = recursiveHuff(t, '', s[i]) 打印'val:',val b.追加(验证) 打印 b def recursiveHuff(树,路径,字符): """给定一棵树、一个空字符串'path'和一个字符, 在树中找到所述字符并返回二进制路径""" 打印'寻找:\t',字符,'路径:\t',路径 如果不是 isLeaf(tree): recursiveHuff(getLeftChild(tree), path+'0', char) recursiveHuff(getRightChild(tree), path+'1', char) 别的: n = getNodeValue(树) 如果 n[1] == 字符: 打印 'found', char, 'at', 路径 返回路径【问题讨论】:
【参考方案1】:您的问题是,当您执行递归步骤时,recursiveHuff 没有返回值。您想累积路径并返回它。正如您现在所拥有的,您对路径所做的更改对于递归调用是本地的。 (因此它们会在您下降时沿链条传播,但不会在您放松时后退)
【讨论】:
OK - 所以 recursiveHuff 的if
语句的最后两行应该是 return recursiveHuff(....) ?进行该更改后,算法仅深入 3 个级别,并且仅在恰好位于这三个级别内时才找到路径...
对如何解决这个问题有什么建议吗?我感觉很难过。
嗯,你需要弄清楚哪个分支有你要找的角色。如果它是左分支,则返回该路径。如果它不在左分支下,则必须向右探索。 (所以你不能立即返回左边的路径)
你能举个例子吗?我不确定我会如何解决这个问题。我不擅长递归,我认为我的能力在这里几乎达到了极限。感谢您的建议。
探索左侧路径,并保存返回的值(称为 p)。如果 p 是一条路径(即不是无,即计算结果为真,即if p:
),那么您已经找到了自己的方式。返回页码。如果不是,它必须在右边,假设你已经正确地构建了你的树并且你正在尝试编码一个非虚假字符,所以将来自探索的路径返回到右边。由于您在叶节点返回路径或(隐式)None,这将终止。至少,看起来会以上是关于将递归函数分配给python中的变量的主要内容,如果未能解决你的问题,请参考以下文章
为啥我应该将函数分配给 javascript 中的变量? [复制]