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的静态
成员变量他在上课。(但正如我也说过的,这不是一个好的解决方案。)