簡體   English   中英

遞歸錯誤。 無法理解遞歸函數的邏輯

[英]Recursion Error. Having trouble understanding the logic with recursive functions

from functools import lru_cache

@lru_cache(maxsize=1000)
def recursiveFunc(x):
    if x == 1:
        return 1
    elif x > 1 :
        return recursiveFunc(x) + recursiveFunc(x+1) #This is the part i'm having doubts about. 

for x in range(1, 101):
     print(x, ":", recursiveFunc(x))

該函數應該使用遞歸生成從1到100的連續數字。

您的問題是您必須很好地學習所有遞歸的故事,這需要時間...您必須可視化程序在每個步驟中執行的操作。 我的建議是在每次調用該函數時繪制第一次堆棧緩沖區


您的問題的解決方案是:

def recursiveFunc(x):
    if x == 1:
        return 1
    elif x > 1 :
        return 1 + recursiveFunc(x-1) #This is the part I've changed.

for x in range(1, 101):
    print(x, ":", recursiveFunc(x))

為什么你不工作? 原因是當函數調用return時,返回啟動新函數recursiveFunc(x)...,但是和以前一樣! 因此存在無限循環。 此外,如果您添加類似recursiveFunc(x + 1)並傳遞x為正數,則您將永遠不會進行比較x == 0,因為x越來越多地被調用。

在這里,我將盡力為您解決問題:)

編寫列出從1到n的數字的函數很簡單。 如果我們嘗試運行此功能

def recursiveFunc(i):
   print(i)
   recursiveFunc(i+1)

recursiveFunc(1)

它會先打印出1,然后再打印2、3...。但永遠不會停止。

1
2
3
...

為了解決這個問題,我們添加了第二個參數

def recursiveFunc(i, n):
   if i > n:
      return

   print(i)
   recursiveFunc(i+1)

recursiveFunc(1, 100)

傳遞n時將轉義該函數,在這種情況下為100

1
2
...
100

如果您想返回該系列而不是僅僅打印出來,可以執行以下操作:

def recursiveFunc(i, n):
   if i >= n:
      return str(i)

   return str(i) + ", " + str(recursiveFunc(i + 1, n))

print(recursiveFunc(1, 100))

然后輸出將是

1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM