2013-02-08 72 views
-2

我们有三角形的块。最上一行有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); 
    } 
} 
+1

你的具体问题是什么?闻起来像代码请求 – 2013-02-08 11:47:58

回答

2

当编写一个简单的递归函数,它有助于把它分成了“基本情况”(当你停止),当你的情况递归。这两种情况都需要返回一些东西,但递归的情况会在某个时候再次调用该函数。

public int triangle(int row) { 
    if (row == 0) { 
    return 0; 
    } else { 
    return row + triangle(row - 1); 
    } 
} 

如果你深入了解一下递归定义,你会发现“尾递归”,这通常是最好的,因为它允许某些编译器的优化,不会使栈溢出的想法。我的代码示例虽然简单且正确,但并不是尾递归。

2

你是不是利用你的函数的返回值。相反,你总是声明一个新的局部变量。否则你的解决方案非常接近正确的解决方案。另外,应在案件再添return你是不是在行0

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; 
}