搜索
简帛阁>技术文章>C语言递归算法系列_打印杨辉三角 循环与递归同时使用(4)

C语言递归算法系列_打印杨辉三角 循环与递归同时使用(4)

杨辉三角又名Pascal三角。其结构存储在一个二维数组里可以当成一个下三角矩阵。

其核心是 每行的行首元素和对角线元素(行列坐标相等)的情况下存储数字1,其它情况下为其腰上的两个元素之和。下面我们就从循环和递归两种方法打印杨辉三角。


1.循环,唯一遇到的困难就是二维数组传参,我为了简便,用了全局变量!

</code></pre>
<pre class="cpp"><code class="language-cpp">#include <stdio.h>
int a[10][10];


void cyanghui(int size)
{
    int i, j;
    for (i = 0; i < size; i++)
    {
        for (j = 0; j <= i; j++)
        {
            if (j == 0 || j == i)
                a[i][j] = 1;
            else
                a[i][j] = a[i - 1][j] + a[i - 1][j - 1];
        }
    }
}


void printyanghui(int size)
{
    int i, j;
    for (i = 0; i < size; i++)
    {
        for (j = 0; j <= i; j++)
        {
           printf("%d ", a[i][j]);
        }
        printf("\n");
    }
}
int main(void)
{
    printf("Inputer YangHui triangle's size(<11):");
    int size;
    scanf("%d", &size);
    cyanghui(size);
    printf("Output:\n");
    printyanghui(size);
    return 0;
}

运行结果(下三角形):

2.递归

我们还是按照那个思路来:

先分析简单情况,就是行首和行列相等时返回1,函数中止。

就是上面双重循环里if情况

否则就求其腰上的两个元素之和,其腰上的两个元素要么为1,要么等于它们腰上的数之和,这就产生了一般规律。

代码如下:

#include <stdio.h>

int yanghui(int i, int j)
{
    if(j == 0 || i == j)
        return 1;
    return yanghui(i - 1, j - 1) + yanghui(i - 1, j);
}

int main(void)
{
            printf("Please input Pascal Triangle's rows:");
            int row;
            scanf("%d", &row);
            printf("\nThere are %d rows Pascal Triangle will be output:\n", row);

             int a[20][20];
             int i, j, k;
            for (i = 0; i < row; i++)
                for (j = 0; j <= i; j++)
                    a[i][j] = yanghui(i, j);

            for (i = 0; i < row; i++)
            {
                for (k = row - i + 7; k > 0; k--)
                {
                    printf("  ");
                }

                for (j = 0; j <= i; j++)
                {
                     printf("%d   ", a[i][j]);
                }
                printf("\n\n");
            }
    return 0;
}

测试输出(这次我们修改了一下输出格式,“腰上”更加看得清晰):



              我们可以看到,递归函数相当简洁。如果有递推式子,写起递归代码来更加得心应手。

杨辉三角又名Pascal三角。其结构存储在一个二维数组里可以当成一个下三角矩阵。其核心是每行的行首元素和对角线元素(行列坐标相等)的情况下存储数字1,其它情况下为其腰上的两个元素之和。下面我们就从循环
本文用C语言代码实现杨辉三角递归算法依据于f(m,n)f(m1,n)+f(m1,n1)其中(m,n)为杨辉三角第m行第n个元素算法代码如下:include<stdioh>//递归函数int
根据杨辉三角的特点,可以使用递归方法。第n行有n个元素,当n>2时,第m元素的值为其上一行的第m1个元素的值第m个元素之和。每行的第一个和最后一个元素的值为1;设第x行的第y个元素为c(x,y),
递归112358132134?123456789?functiondg(n){if(n1||n2){return1;}else{returndg(n1)+dg(n2);}}alert(dg(5));正
杨辉三角是一个非常经典的题目,可以用很多种方法来求解,这里我用循环递归两种方式来进行解答。首先我们要知道和了解杨辉三角的构成。1每个数等于上方两个数之和2每一行的第一个数字和最后一个都是13每行的数
杨辉三角的定义啥的我就不多哔哔了,直接上图↓在图中我们可以简单直接地得出一个重要的结论:每一行中除了最左端和最右端的值为1以外,其它位置的值为它上面两个数字的和。那么,想象一下,如果把杨辉三角靠左对齐
戳这里还有其他数据结构的题目噢数据结构——部分题目和代码实现目录_起当风萧的博客CSDN博客设计并验证输出杨辉三角递归算法。(1)杨辉三角,又称贾宪三角形、帕斯卡三角形,是二项式系数在三角形中的一种
include<stdioh>include<malloch>include<stdlibh>defineMAXQSIZE200typedefintQElemTyp
最近周末在参加嵌入式培训,才学到C语言函数部分,,用VS2018软件写的。收集整理如下/*3打印杨辉三角形(要求打印出10行如下图)111121133114641………………*/pragmawar
楼层疑似违规已被系统折叠隐藏此楼查看此楼【问题在于,最前面的是输出的只占有一个字符,但是后面的都是占有4个字符位!这怎么解】在71题,我们输出的数字三角形,叫做杨辉三角形,是二项式的系数,当时使用