c - 如何将此递归函数转换为迭代版本



这段代码基本上计算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);
 }
}

如何将此函数转换为迭代版本?

我之前忘了提到这一点,但解决方案必须在不使用列表的情况下,以某种方式将这个精确的递归逻辑转换为迭代逻辑。

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

相关内容

  • 没有找到相关文章

最新更新