我们有三角形的块。最上面的行有1个块,下一行有2个块,下一行有3个块,依此类推。以递归方式(无循环或乘法)计算具有给定行数的这种三角形中的块的总数。
triangle(0) → 0
triangle(1) → 1
triangle(2) → 3
这是我的代码:
public int triangle(int rows) {
int n = 0;
if (rows == 0) {
return n;
} else {
n = n + rows;
triangle(rows - 1);
}
}
答案 0 :(得分:2)
您没有使用函数的返回值。相反,您总是声明一个新的局部变量。否则你的解决方案非常接近正确的解决方案。另外,如果您不在第0行,还应添加另一个return
。
答案 1 :(得分:2)
当编写一个简单的递归函数时,它有助于将其拆分为“基本情况”(停止时)和递归时的情况。两种情况都需要返回一些东西,但递归的情况是在某个时候再次调用该函数。
public int triangle(int row) {
if (row == 0) {
return 0;
} else {
return row + triangle(row - 1);
}
}
如果你进一步研究递归定义,你会发现“尾递归”的概念,这通常是最好的,因为它允许某些编译器优化不会溢出堆栈。我的代码示例虽然简单而正确,但不是尾递归。
答案 2 :(得分:0)
public static int triangle (int rows) {
int n = 0;
if (rows == 0) {
return n;
} else {
n = n + rows;
n = n + triangle(rows - 1);
}
return n;
}