Java 数一数树上的孙子孙女

Java 数一数树上的孙子孙女,java,recursion,tree,Java,Recursion,Tree,可能重复: 用这种方法计算一棵树上孙子的数量,但不计算曾孙的数量,有什么错 (child1为左子级,child2为右子级)此外,此方法不应采用任何参数。如果您提供了替代解决方案,请同时告诉我当前解决方案有什么问题 public int countGrandChildren() // but not greatGrandChildren { int count=0; int depth=1; if (depth<4){

可能重复:

用这种方法计算一棵树上孙子的数量,但不计算曾孙的数量,有什么错

(child1为左子级,child2为右子级)此外,此方法不应采用任何参数。如果您提供了替代解决方案,请同时告诉我当前解决方案有什么问题

  public int countGrandChildren() // but not greatGrandChildren
    {
        int count=0;
        int depth=1;
        if (depth<4){
            if (child1!=null){
                count+=child1.countGrandChildren();
                depth++;
                if (depth==3)
                    count++;
            }
            if (child2!=null){
                count+=child2.countGrandChildren();
                depth++;
                if (depth==3)
                    count++;    
            }   
        }
        return count;

    }
public int count孙子女()//但不包括曾孙子女
{
整数计数=0;
int深度=1;

如果(depth如果您不向每个递归调用传递depth,这将如何工作?depth在开始时始终为1,然后您可以增加它。但它永远不会为==3。

正如在中所讨论的,您不会在连续的递归调用之间传递任何参数,因此它们如何可能终止

int depth=1;if(depth<4).
将始终如此

解决方案是以下可能性之一的变体:

  • 递归传递
    深度
    (或等效)参数
  • 在其他地方保持计数(错误)
  • 根据类a
    myDepth
    成员变量在树中的位置,在构造时为其分配每个实例(如果需要重新排列树中的项,这将是一件痛苦的事情)

您最好的选择是将深度变量作为函数的参数传递。这里有一个简单的示例,通过递归调用函数,但每次传递的参数减去1,来计算数字的阶乘

public int calcFactorial(int facnum){
    int res;
    if (facnum==1){
        res=1;
        }
     else {
        res=facnum*calcFactorial(facnum-1);
        }        

}

请不要提出一个与你的旧问题基本相同的新问题……好吧,没有人尽可能地帮助我解决其他问题(合理)在上一个问题中给出了答案。再次提问不会改变这一事实!重复为什么要求函数没有参数?赋值说明了吗?但深度正在增加..我认为您不太了解变量的范围。当您声明“int depth”时它仅对该函数有效,下次调用Count孙辈时,深度将再次为0。但每次我进入更深层次时,深度都会增加level@prime:
depth
是对
countgreat孙子()的每次调用的本地
,并在函数开始时将其设置为1。在每次调用中,它是不同的
深度
变量(并且总是初始化为1)@fpinite:不,你不是。你有
depth
作为局部变量,因此每次调用该方法时它都会重新初始化为1。那么我唯一的选择就是在其他地方保持计数。我该怎么做?@fpinite:正如我在对上一个问题的评论中所建议的,你可以使用,例如,t的
静态
成员变量他在上课。(但正如我也说过的,这不是一个好的解决方案。)