入门有趣程序、三角形金字塔
大约 3 分钟
入门有趣程序、三角形金字塔
一个有趣的三角形程序
上大一的时候新疆农业大学白涛老师出的一道题目,我和西迪做出了这道题,当时成就感满满。
一、先看结果图
二、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语言去实现
递归在数据结构 二叉树遍历中用的比较多,可以了解一下