入门有趣程序、三角形金字塔

东方盛慧科技大约 3 分钟工具集其它

入门有趣程序、三角形金字塔

一个有趣的三角形程序

上大一的时候新疆农业大学白涛老师出的一道题目,我和西迪做出了这道题,当时成就感满满。

一、先看结果图

dd
dd

二、golang实现

由于本地没有c开发环境,现在用golang写一遍,非常适合初学者

有两种思路

  • 一种就是比较笨的,刚入编程,只要肯努力,勤奋,有决心即可写出的笨办法,纯粹的for循环加ifelse控制(当年本人的作答方式)
  • 另一种就是用递归(当年西迪同学的作答方式)

将图片中的代码 添加注释:

func main() {
	var totalFloors = 5
	var totalLine = 5
	/**
	打印 totalFloors 层金字塔 ,第一层有一个三角形,第n层 n+1个三角形
	 */
	for floors:=0 ; floors<totalFloors ; floors++{
		print("\n")
		printChar(floors,0,totalLine,totalFloors)
	}
	print("\n")
}

/**
	参数意思:
	floors: 金字塔目前打印的层数
	line:	小块三角形 目前打印的高度
	totalLine: 小块三角形 总高度 固定不变
	totalFloors: 金字塔总层数 固定不变
	递归结束条件:打印到当前层数的最后一行
 */
func printChar(floors int, line int, totalLine int, totalFloors int){
	// 打印每一行 前面的空格,目前
	// 每一行前面的空格总数=(总层数-目前所处层数-1)x 小块三角形高度+小块三角形第几行
	for l:=0;l<(totalFloors-floors-1)*totalLine+line;l++{
		print(" ")
	}
	// 打印金字塔区域
	// 规律:
	//	每一层
	//	实心三角形个数 = 金字塔总层数
	//	空心三角形个数 = 金字塔总层数-1
	for d:=0;d<= floors;d++{
		// 打印金字塔空心三角形区域
		// 空心三角形是倒立三角形
		// 每一行的空格数量 2*(totalLine-line-1)+1 控制for循环实现即可
		for i:=2*(totalLine-line-1);i>=0;i--{
			print(" ")
		}
		// 打印金字塔实心区域
		// 每一行的星星数量 n=0; 1 3 5 7 9 ... 2*n+1 ,控制for循环实现 2*n+1
		for j:=0;j<=2*line;j++{
			print("*")
		}
	}

	if(line >= totalLine-1){
		// 递归结束
		return
	}else{
		// 递归继续 打印金字塔floors(主函数控制)层小三角行的下一行: line+1行
		print("\n")
		printChar(floors, line+1, totalLine, totalFloors)
	}
}

三、相关思路

  • 此题不用递归,用纯粹的for循环找规律也可以实现,要有决心
  • 先熟悉一下函数的递归知识,并做题练习
  • 学会分解任务,利用调试技巧,去实现目的
  • 比如 用递归先打印一个三角形 然后一层三角形 然后整个金字塔,任务
  • 比如调试的时候 空格部分用别的字符替代,方便调试结果
  • 或者参考上面代码中的注释(相当于伪代码) 用C语言去实现

递归在数据结构 二叉树遍历中用的比较多,可以了解一下

上次编辑于:
贡献者: 雷勋