zoukankan      html  css  js  c++  java
  • 杨辉三角(数组/递归)

    最近也是刚刚学C语言不到两个月,对于杨辉三角这个经典的题目在此进行记录下,一方面有助于以后的复习,另一方面希望之后能够帮助到像我这样的初学者。

    我这里以遇到的题目为例,来研究最简单的那个,也就是类似于这种:

    1

    1  1  

    1   2   1

    1   3    3   1

    ………………

    这里先给出数组的方法。我所采用的是二维数组,这里先给出代码,具体的分析就请看注释吧。

    #include <stdio.h>
    int main()
    {
        int a[100][100],n;//首先自定义一个二维数组和一个控制循环的变量n,也就是你所需打印的行数
        printf("输入所打印的行数
    ");
        scanf("%d",&n);
        a[0][0]=1;//将数组的第一个元素赋值为1,这也就是三角的第一个元素
        int i,k;
        for(i=0;i<=n;i++)//第一个i控制的是行数,进行一次循环会输出一个"
    "
        {
            for(k=0;k<i;k++){//第二个k控制输出每行的元素
                if(k==0) a[i][k]=1;//每行的第一个元素为1
                if(k==i) a[i][k]=1;//行列相等时元素为1
                else a[i][k]=a[i-1][k]+a[i-1][k-1];//杨辉三角的递推公式
                printf("%5d",a[i][k]); 
            }
            printf("
    ");
        }
        return 0;
        
     } 

    接下来我们来看递(套)归(娃)的办法:

    其实用递归我也是一时兴起,在学过递归之前我都没有在回头看过杨辉三角,以为这东西会一个代码就够了,后来见识到递归的简便性,发现自己实在是太无知了23333

    这里先大概说下我对于递归的理解吧:递归也就是函数自己调用自己,借此,我们可以通过递归来表示一些循环部分。

    这里依旧是先给出代码:

    #include <stdio.h>
    int yhsj(int a,int b)//首先定义一个函数,a表示行元素,b表示列元素,这里我没有用数组,所以他们都是从1开始的。 
    {
        if(a==b) return 1;//这里设置三个递归出口,也就是当行列相等或者行列为1时的返回值。 
        if(b==1) return 1; 
        if(a==1) return 1;
        else   return yhsj(a-1,b)+yhsj(a-1,b-1);//好的,出现了!这里就是通过递归来实现杨辉三角的递推式。 
    }
    
    int main()//主函数与之前的数组类似,不过不同的是printf可以直接采用之前定义的函数 
    {
        int i,n,k;
        printf("输入打印行数
    ");
        scanf("%d",&n); 
        for(i=1;i<=n;i++)
        {
            for(k=1;k<=i;k++)
            {
                printf("%5d",yhsj(i,k));
            }
            printf("
    ");     
        }
        return 0;
    }

    这里给大家看下输出的结果:

    输入打印行数
    6
        1
        1    1
        1    2    1
        1    3    3    1
        1    4    6    4    1
        1    5   10   10    5    1
    
    --------------------------------
    Process exited after 2.728 seconds with return value 0
    请按任意键继续. . .

    好的,这就是我对于杨辉三角的理解,个人感觉递归的方法其实更加好用,相比于常规的数组来说,看着是多了几行代码,但是可读性要好很多。

    希望大家可以从中学到点什么,另外毕竟是初学,文章漏洞可能会有很多很多,欢迎各位大佬指点!!

    人生如逆旅,我亦是行人
  • 相关阅读:
    Android 一个TextView中设置多种不同大小的字体,设置超链接
    Android Okhttp POST提交键值对
    第九天
    第八天
    第七天
    第六天
    第三天
    day 51
    day 49
    day 48 bootstrap
  • 原文地址:https://www.cnblogs.com/sz2003/p/14041041.html
Copyright © 2011-2022 走看看