Python递归行为

2024-04-25 18:53:17 发布

您现在位置: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的列表来替换函数的“print”,但是我不能让它工作,因为我不明白这个递归是如何工作的。我看到它每次都调用自己,然后当v_Num==1或更小时启动一个折叠,但是它折叠到“if”语句之外,然后我就迷路了。当我试图从折叠中组装STR或LIST而不是仅仅打印它时,我会出错或返回最后一个数字。你知道吗

我的问题是:fèu DecToBinary如何工作/工作,以及如何将输出捕获到字符串中?你知道吗

一些例子:

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

谢谢


Tags: ofthe字符串returnifstackdefnum
2条回答

遵循函数的典型流程。它将自己调用,从而产生一些输出,然后打印一个数字。因此,一位数出现在前一位数的末尾。要返回结果而不是打印结果,您需要获取递归调用的结果并将当前结果添加到其末尾。你知道吗

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

相关问题 更多 >