如果它的参数称为尾递归,是否有一个方法调用?
Is a method that has a method call in one if its parameters called tail recursive?
我正在研究尾递归,我不确定我的定义是否正确。
我看到了这个post的最佳答案(link)
并且想知道在以下示例中方法 sum(int x, int num) 是否被视为尾递归:
public class tailrecusiontest {
private static int total;
private static int add(int num)
{
total+=num;
return total;
}
public static int sum(int x, int num) //THIS METHOD TAIL-RECURSIVE?
{
if(num == 0)
{
return x;
}
return sum(add(num), num-1);
}
public static void main(String[] args) {
System.out.print("" + sum(0,4));
}
}
I.e:是什么阻止我创建一个对象并调用一个方法(在我的示例中为 add(int num))来处理数据,返回一个输出并且,根据定义,将其称为方法 tail-recursive?
我问这个问题是因为作业问我是否可以创建一个方法"tail-recursive",想知道尾递归的定义扩展到什么程度。
这意味着我可以创建任何方法并传入值然后将其称为尾递归
你的方法符合尾递归的定义,但是Java本身没有尾递归优化。这意味着您仍然会有一个 N 大小的堆栈,并且 return 1 乘 1 通过它。
简单来说,尾递归是一种递归,其中递归调用是函数中的最后一条指令。
根据这个简单的定义,您的示例代码是尾递归的,因为递归调用是最后一条指令。
就是说,这个问题感觉像是重复的,因为您本质上是在问什么是尾递归,而且 SO 上的几篇文章已经对此做了公正的解释。有关尾递归的进一步阅读,请参阅 'What is tail recursion'.
我正在研究尾递归,我不确定我的定义是否正确。
我看到了这个post的最佳答案(link) 并且想知道在以下示例中方法 sum(int x, int num) 是否被视为尾递归:
public class tailrecusiontest {
private static int total;
private static int add(int num)
{
total+=num;
return total;
}
public static int sum(int x, int num) //THIS METHOD TAIL-RECURSIVE?
{
if(num == 0)
{
return x;
}
return sum(add(num), num-1);
}
public static void main(String[] args) {
System.out.print("" + sum(0,4));
}
}
I.e:是什么阻止我创建一个对象并调用一个方法(在我的示例中为 add(int num))来处理数据,返回一个输出并且,根据定义,将其称为方法 tail-recursive?
我问这个问题是因为作业问我是否可以创建一个方法"tail-recursive",想知道尾递归的定义扩展到什么程度。
这意味着我可以创建任何方法并传入值然后将其称为尾递归
你的方法符合尾递归的定义,但是Java本身没有尾递归优化。这意味着您仍然会有一个 N 大小的堆栈,并且 return 1 乘 1 通过它。
简单来说,尾递归是一种递归,其中递归调用是函数中的最后一条指令。
根据这个简单的定义,您的示例代码是尾递归的,因为递归调用是最后一条指令。
就是说,这个问题感觉像是重复的,因为您本质上是在问什么是尾递归,而且 SO 上的几篇文章已经对此做了公正的解释。有关尾递归的进一步阅读,请参阅 'What is tail recursion'.