杨辉三角的算法实现

杨辉三角是我国古代数学中一颗明珠,关于它的实现算法网络上不胜枚举,各有千秋。博主不才,在面试中遇到这道题虐得体无完肤。记于此以儆效尤。

case1:已知杨辉三角某个值的坐标,求该坐标处的杨辉三角值。

题目:设杨辉三角中行号为i,列号为j,要求实现输入一组行号i,j,输出对应位置的杨辉三角值。

算法解析:递归思想,其两大要素为递归函数以及递归出口。杨辉三角规律当前值等于两肩之和, 此即递归函数,递归出口为杨辉三角塔顶值为1。

代码实现:

public class Yanghui {
    public static void main(String[] args) {
        //测试打印第7行第7位数的杨辉三角值
        System.out.println(yang(7, 7));
    }
    //递归函数
    public static int yang(int i,int j){
        //赋初值为1
        if(i==0 && j==0){return 1;} 
        //越界非法值为0
        else if(j<0 || j>i){return 0;}
        //杨辉三角值递归计算
        else{
            return yang(i-1, j-1)+yang(i-1, j);
        }
    }
}

case2:实现杨辉三角金字塔结构打印

题目:输入行号n(起始值为0),打印输出n+1行的杨辉三角金字塔结构。

算法解析:case1已经实现了输出任意坐标的杨辉三角值,此时只需按金字塔结构循环打印即可。
注:杨辉三角在高位坐标时,由于位数的增加从而破坏了金字塔结构的美观性,此处不再关注。

代码实现:

public class Yanghui {
    /** * @author stefan_xiepj * 杨辉三角的算法实现 */
    public static void main(String[] args) {
        //测试打印7杨辉三角值
        YH(7);
    }
    //杨辉三角函数
    public static void YH(int n){
        int count=n;
        for(int i=0;i<n;i++){
            //打印金字塔控制
            for(int t=count;t>0;t--){
                System.out.print(" ");
            }
            count--;
            //打印杨辉三角值
            for(int j=0;j<n;j++){
                int m = yangRecursion(i, j);
                if(m==0){
                    continue;
                }else{
                    System.out.print(" "+m+" ");
                }
            }
            //换行
            System.out.println();
        }
    }

    //递归函数
    public static int yangRecursion(int i,int j){
        //赋初值为1
        if(i==0 && j==0){return 1;} 
        //越界值为0
        else if(j<0 || j>i){return 0;}
        //杨辉三角值递归计算
        else{
            return yangRecursion(i-1, j-1)+yangRecursion(i-1, j);
        }
    }
}

测试结果:

                                         1  
                                       1   1  
                                     1   2   1  
                                   1   3   3   1  
                                 1   4   6   4   1  
                               1   5   10   10   5   1  
                             1   6   15   20   15   6  1  
    原文作者:杨辉三角问题
    原文地址: https://blog.csdn.net/Stefan_xiepj/article/details/52539161
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞