2015-06-01 39 views
1

我研究了递归,特别是在Python中,并认为我明白了。 我学会了这种形式:Python递归行为

def f_Listsum(numList): 
    if len(numList) == 1: 
     return numList[0] ## Triggers the unwinding of the recursion stack 
    else: 
     return numList[0] + f_Listsum(numList[1:]) ## Winds up the recursion stack with a shorter and shorter slice of org. list. 

我明白了。递归调用对“风”事物进行排序,然后停止或“触发器”导致递归崩溃到自身并消耗结果值。

但是我碰到了今天这个:

def f_DecToBinary(v_Num): 
    if v_Num > 1: 
     f_DecToBinary(v_Num // 2) 
    print(v_Num % 2,end = '') 

我想用字符串,甚至是int类型列表的回报来替代函数的“打印”,但我不能让它开始工作,因为我不明白这个递归是如何运作的。我发现它每次都调用它自己,然后在v_Num == 1或更小时启动崩溃,但它会崩溃到“if”语句之外,然后我迷路了。当我试图从崩溃中组装一个STR或LIST而不是仅打印它时,我错误或仅返回最后一位数字。

我的问题是:f_DecToBinary如何工作/功能,以及如何将输出捕获到字符串?

一些例子:

print(f_Listsum([1,3,5,7,9])) ## 25 
print() 
f_DecToBinary(15) ## 1111 

感谢

+0

//,你说的方式“递归调用对某些东西进行排序,然后停止或”触发器“会使递归崩溃并消耗结果值。”表明你有机会看看递归函数在哪里以及如何破坏。你怎么去检查他们的价值观@ JayJay123? –

回答

2
def DecToBinary(n): 
    if n >= 2: 
     return DecToBinary(n // 2) + str(n % 2) 
    else: 
     return str(n) 
+0

谢谢,我欣赏它。 – JayJay123

+1

我很感谢你的问题。理解递归是有用的。 – dlask

3

按照通过功能的典型流程。它会自动调用,导致一些输出,然后打印一个数字。所以单个数字在前面的处。要返回结果而不是打印它,您需要获取递归调用的结果并将当前结果添加到结尾。

+0

谢谢你的帮助。 – JayJay123