如何用R语言编写实现开头带空格的倒半奇数金字塔函数?
解决R语言倒半奇数金字塔输出问题
原代码的问题分析
- 循环逻辑混乱:内层嵌套循环没有区分前置空格和数字输出的逻辑,反而重复输出循环变量
i,完全不符合需求。 - 错误修改循环变量:在循环内将
i强制转换为字符型,破坏了整数循环的迭代逻辑,导致后续循环行为异常。 - 低效的外层循环:外层循环遍历从
2n到1的所有整数,再筛选奇数,冗余且没必要。
修正后的代码
half_pyramid = function(n) { # 生成倒金字塔需要的奇数序列:从2n-1递减到1,步长为-2 odd_rows = seq(from = 2 * n - 1, to = 1, by = -2) for (k in odd_rows) { # 计算每行开头的空格数:n减去当前行数字个数的一半(向下取整) space_num = n - (k - 1) %/% 2 # 输出前置空格 cat(strrep(" ", space_num)) # 输出1到k的连续数字 cat(paste(1:k, collapse = "")) # 换行 cat("\n") } }
代码说明
- 奇数序列生成:直接用
seq生成从2n-1到1的奇数,避免遍历无用的偶数。 - 空格计算:通过
n - (k - 1) %/% 2得到每行需要的前置空格数,确保倒金字塔的缩进效果(行数越靠后,空格越多)。 - 输出逻辑:先用
strrep快速生成指定数量的空格,再拼接并输出1到k的数字,最后换行完成一行的输出。
测试示例
- 调用
half_pyramid(1),输出:1 - 调用
half_pyramid(3),输出:12345 123 1
内容的提问来源于stack exchange,提问作者tim
相关产品推荐
相关产品推荐

