【Java学习】Java杨辉三角逐步实现思想过程以及python实现(6)

本文详细介绍了如何使用Java和Python实现杨辉三角,包括初始化矩阵、填充边界、计算内部元素及递归实现,提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

杨辉三角Java实现与python实现

Java

逐步思想:

1.首先生成一个n行n列的0,两个for循环

package com.jingfei.csdn;

import java.util.Scanner;

public class YangHui {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();
        int [][] arr =  new int[n][n];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

2.每行递增出现,不需要整行都出现
只需要将内部的for循环的范围改为<=i

package com.jingfei.csdn;

import java.util.Scanner;

public class YangHui {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();
        int [][] arr =  new int[n][n];
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j <=i; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

3.将前后全部填1.

package com.jingfei.csdn;

import java.util.Scanner;

public class YangHui {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();
        int [][] arr =  new int[n][n];

        for (int i = 0; i < arr.length; i++) {
            arr[i][0]=1;
            arr[i][i]=1;
            for (int j = 0; j <=i; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

4.实现中间相加
从索引第2行,索引第1列开始,每一个元素值为上一行的前一列与当前列的和.

package com.jingfei.csdn;

import java.util.Scanner;

public class YangHui {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();
        int [][] arr =  new int[n][n];

        for (int i = 0; i < arr.length; i++) {
            arr[i][0]=1;
            arr[i][i]=1;
            /*for (int j = 0; j <=i; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();*/

        }
        for (int i = 2; i < arr.length; i++) {
            for (int j = 1; j <= i; j++) {
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j <= i; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

在这里插入图片描述

package com.jingfei.csdn;

import java.util.Scanner;

public class YangHui {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个数:");
        int n = scanner.nextInt();
        int [][] arr =  new int[n][n];

        for (int i = 0; i < arr.length; i++) {
            arr[i][0]=1;
            arr[i][i]=1;
            /*for (int j = 0; j <=i; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();*/

        }
        for (int i = 2; i < arr.length; i++) {
            for (int j = 1; j <= i; j++) {
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }
        for (int i = 0; i < arr.length; i++) {
            for (int s = i; s < arr.length; s++) {
                System.out.print(" ");//空格,为了好看.
            }
            for (int j = 0; j <= i; j++) {
                System.out.print(arr[i][j]+" ");
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

递归

一.

public static int digui(int i,int j)
{
if(j==0||j==i)
return 1;
else
return digui(i-1,j)+digui(i-1,j-1);

}

public static void main(String args[])
{
int tri[][];
tri=new int[10][10];
for(int i=0;i<10;i++)
for(int j=0;j<=i;j++)
tri[i][j]=digui(i,j);

for(int i=0;i<10;i++)
{
System.out.println();
for(int n=10-i;n>=1;n--)
System.out.print(" ");
for(int j=0;j<=i;j++)
System.out.print(tri[i][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 
   1 7 21 35 35 21 7 1 
  1 8 28 56 70 56 28 8 1 
 1 9 36 84 126 126 84 36 9 1 

二.

package com.jingfei.csdn;

public class Yanghui {
    public static void main(String[] args) {
        int[][] arr = new int[10][];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = new int[i+1];
        }
        //{{1}{1,1}{1,2,1}{1,3,3,1}}
        for (int i = 0; i < arr.length; i++) {
            arr[i][0]=1;
            arr[i][i]=1;
            for (int j = 1; j < i; j++) {
                arr[i][j] = arr[i-1][j-1]+arr[i-1][j];
            }
        }
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

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	
1	7	21	35	35	21	7	1	
1	8	28	56	70	56	28	8	1	
1	9	36	84	126	126	84	36	9	1	

三.

package com.jingfei.csdn;

public class YangHuiSanJiao {
        public static void main(String args[])
        {
            int x=10;//输入几层是几层
            int num[][] = new int[x][x];//这个数组有几层
            for(int m=0;m<x;m++)//主要是对数组进行赋值
            {
                for(int n=0;n<=m;n++)//每一层的个数都是小于等于层数的,m代表层数,n代表着第几个数
                {
                    if(n==0||m==n)//每一层的开头都是1,m==n的时候也是1,必须要这个,凡事都得有个开头
                    {
                        num[m][n]=1;
                    }
                    else
                        num[m][n]=num[m-1][n-1]+num[m-1][n];//这个就是递推的方法了,例如3=1+2,3的坐标就是3[3,1]=1[2,0]+2[2,1];
                }
            }
            for(int i=0;i<x;i++)//主要是输出数组
            {
                for(int l=i;l<x;l++)//这个主要是打空格,好看一点,去掉就是直角三角形了
                {
                    System.out.print(" ");
                }
                for(int j=x-i;j<=x;j++)//这个就是打印数组了,每层循环几次就几个
                {
                    System.out.print(num[i][x-j]+" ");//不懂的可以把x替换成10,更加清楚点
                }
                System.out.println();//每层换行
            }
        }
    }



          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 
   1 7 21 35 35 21 7 1 
  1 8 28 56 70 56 28 8 1 
 1 9 36 84 126 126 84 36 9 1 

python

# -*- coding: utf-8 -*-
 
def triangles():
    N=[1]
    while True:
        yield N        #generator函数与普通函数的差别:在执行过程中,遇到yield就中断,下次又继续执行
        N.append(0)
        N=[N[i-1] + N[i] for i in range(len(N))]  #写法
 
if __name__ == '__main__':
	n=0
	for t in triangles():
		print(t)
		n=n+1
		if n == 10:
			break

#计算杨辉三角 普通法
triangle = [[1],[1,1]]
n = 8
for i in range(2,n):
    swap = triangle[-1]
    cul = [1]
    for j in range(len(swap)-1):
        cul.append(swap[j] + swap[j+1])
    cul.append(1)
    triangle.append(cul)
print(triangle)

#计算杨辉三角 补0法/在每行末尾补零
tra = [[1]]
for i in range(1,6):
    swap =  tra[i-1]+[0]
    cul = list()
    for j in range(i+1):
        cul.append(swap[j-1]+swap[j])
    tra.append(cul)
tra

#计算杨辉三角 补0法
triangle = [[1]]
n = 7
for i in range(1,n):
    swap = triangle[i-1]+[0]
    cul = [1]
    for j in range(len(swap)-1):
        cul.append(swap[j]+swap[j+1])
    triangle.append(cul)
print(triangle)

---------------------------------------------------------------------------------------
谢谢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值