重要提示:示例错误,我在底部解释了原因
正如标题所述,问题即将定义一种方法来确定何时以递归方式调用当前执行方法。
我考虑过一个“查询方法”,它返回一个布尔值,指示调用者方法(即调用“查询方法”的方法)是否已经被调用过。
如何检查:只需查看堆栈跟踪,看看我们要检查的方法是否在堆栈跟踪中出现两次或更多次。
解释完之后,这里是一个方法的实现和它的各自使用。
这是不对的……
public class Test
{
public static boolean isRecusivelyInvoqued () {
StackTraceElement[] traces = Thread.currentThread().getStackTrace();
boolean res = false;
// the first belong to "getStackTrace" and the second to "isRecusivelyInvoqued" (this method)
if (traces.length > 2) {
String invokedMethodName = traces[2].getMethodName(); // the third is the method we want to check
for (int i = 3; i < traces.length && !res; i++)
{
res = invokedMethodName.equals(traces[i].getMethodName());
i++;
}
}
return res;
}
// this is a recursive method, used to verify the correct functioning
public static int factorial (int n) {
System.out.println(isRecusivelyInvoqued());
if (n == 0) {
return 1;
}
else {
return n * factorial(n-1);
}
}
public static void main(String[] args)
{
System.out.println(factorial(4));
}
}
我意识到如果不同名称空间(类或实例)中的方法具有相同的名称,它将返回递归调用。我认为我们到目前为止得到的一个解决方案是正确的;) jeje。
这对我有用......有没有更好的方法来归档我的目标?如何判断当前执行方法何时被递归调用?