-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数组来保存值,以便我可以使用它们而不是一次又一次地调用函数。我用动态规划的概念。请研究它以了解代码。

相关问题