使用 JS、Python 和 Java 学习算法 9:打印步骤
1:迭代解法
2:递归解法
本系列文章以Stephen Grider在Udemy上的课程为基础,涵盖三种不同的编程语言。JavaScript的解决方案由Stephen提供,我尝试将其“翻译”成Python和Java。
今天的问题旨在引出递归的概念。
--- 说明:
编写一个函数,该函数接受一个正数 N 作为参数。
该函数应在控制台输出一个阶跃曲线
,阶跃曲线的起始位置使用 # 字符。请确保阶跃
曲线的右侧有空格!
--- 示例:
steps(2)
'# '
'##'
steps(3)
'# '
'## '
'###'
steps(4)
'# '
'## '
'### '
'####'
1:迭代解法
JavaScript:
function steps(n) {
for (let row = 0; row < n; row++) {
let stair = '';
for (let column = 0; column < n; column++) {
if (column <= row) {
stair += '#';
} else {
stair += ' ';
}
}
console.log(stair);
}
}
Python:
def steps(n):
for row in range(n):
stair = ''
for column in range(n):
if column <= row:
stair += '#'
else:
stair += ' '
print(stair)
Java:
static void steps(int n) {
for (int row = 0; row < n; row++) {
StringBuilder stair = new StringBuilder();
for (int column = 0; column < n; column++) {
if (column <= row) {
stair.append("#");
} else {
stair.append(" ");
}
}
System.out.println(stair);
}
}
2:递归解法
JavaScript:
function steps(n, row = 0, stair = '') {
if (n === row) {
return;
}
if (n === stair.length) {
console.log(stair);
return steps(n, row + 1);
}
stair += stair.length <= row ? '#' : ' ';
steps(n, row, stair);
}
Python:
def steps(n, row=0, stair=''):
if n == row:
return
if n == len(stair):
print(stair)
return steps(n, row+1)
stair += '#' if len(stair) <= row else ' '
steps(n, row, stair)
Java:
static void steps(int n) {
steps(n, 0, new StringBuilder());
}
static void steps(int n, int row, StringBuilder stair) {
if (n == row) {
return;
}
if (n == stair.length()) {
System.out.println(stair);
steps(n, row + 1, new StringBuilder());
return;
}
stair.append(stair.length() <= row ? "#" : " ");
steps(n, row, stair);
}