-2

該代碼基本上計算nCr打印帕斯卡的三角形。如何將此遞歸函數轉換爲迭代版本?

#include <stdio.h> 

int nCr(int n,int r){ 
    if (r == 0 || r == n || n == 1 || n == 0){ 
     return 1; 
} 
else{ 
    return nCr(n-1,r) + nCr(n-1,r-1); 
} 
} 

這個函數如何變成迭代版本?

我之前忘了提到這個,但是解決方案必須不使用列表,以某種方式將這個確切的遞歸邏輯轉換爲迭代邏輯。

+0

只要想一想在每個遞歸步驟中會發生什麼,並實現一個類似這樣的循環。您可能需要一個商店來保存迭代數據的值。使用遞歸時,此數據存儲在堆棧中。快樂工程! –

+0

在一張紙上繪製帕斯卡三角形。嘗試從開始「走」到具體的價值。在上述「步行」期間,考慮在每一步中你需要什麼樣的價值觀,以及這些價值觀何時完成了他們的目標並可以被拋棄。然後用一個循環和一些變量來寫這個步驟。 – StoryTeller

回答

0
#include <stdio.h> 

int main(void) { 

    int n,r; 
    scanf("%d%d",&n,&r); 

    int mem[n+1][r+1]; 

    int i,j; 

    for(i=0;i<n+1;i++) 
    { 
     for(j=0;j<r+1;j++) 
     { 
      if (j == 0 || j == i || i == 1 || i == 0) 
       mem[i][j]=1; 
      else 
       mem[i][j]=mem[i-1][j]+mem[i-1][j-1]; 
     } 
    } 

    printf("%d",mem[n][r]); 


    return 0; 
} 

我已經使用了2D數組來保存值,以便我可以使用它們而不是一次又一次地調用函數。我用動態規劃的概念。請研究它以瞭解代碼。

相關問題