Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如果一个方法的参数称为tail recursive,那么该方法中是否有方法调用?_Java_Definition_Tail Recursion - Fatal编程技术网

Java 如果一个方法的参数称为tail recursive,那么该方法中是否有方法调用?

Java 如果一个方法的参数称为tail recursive,那么该方法中是否有方法调用?,java,definition,tail-recursion,Java,Definition,Tail Recursion,我正在研究尾部递归,我不确定我是否得到了正确的定义 我看到了这篇文章最好的答案 我想知道在下面的例子中,sumint x,int num方法是否被认为是尾部递归的: public class tailrecusiontest { private static int total; private static int add(int num) { total+=num; return total; } public s

我正在研究尾部递归,我不确定我是否得到了正确的定义

我看到了这篇文章最好的答案 我想知道在下面的例子中,sumint 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));
    }
}
例如:在我的示例中,是什么阻止我创建一个对象并调用一个addint num方法来处理数据、返回一个输出并根据定义将其称为方法tail recursive

我问这个问题是因为一个任务问我是否可以使一个方法尾部递归,并且想知道尾部递归的定义扩展了多远


这意味着我可以创建任何方法并传入值,然后称之为尾部递归

您的方法符合尾部递归的定义,但Java本身没有尾部递归优化。这意味着您仍将有一个N大小的堆栈,并通过它1乘1返回。

您的方法符合尾部递归的定义,但Java本身没有尾部递归优化。这意味着您仍将有一个N大小的堆栈,并通过它1乘1返回。

简单地说,尾部递归是一种递归类型,其中递归调用是函数中的最终指令

基于这个简单的定义,您的示例代码是尾部递归的,因为递归调用是最后一条指令


这就是说,这个问题感觉像是重复的,因为你本质上是在问什么是尾部递归,所以有几篇文章对此做了公正的解释。有关尾部递归的更多信息,请参见。

简单地说,尾部递归是一种递归类型,其中递归调用是函数中的最终指令

基于这个简单的定义,您的示例代码是尾部递归的,因为递归调用是最后一条指令


这就是说,这个问题感觉像是重复的,因为你本质上是在问什么是尾部递归,所以有几篇文章对此做了公正的解释。有关尾部递归的更多信息,请参阅。

我认为您没有抓住要点;函数是否为尾部递归并不取决于参数是什么,也不取决于参数中的任何内容可能会做什么。如果有什么不同,您可以将addnum与n-1一样对待,以确定sum是否为尾部递归。您链接的帖子中的第二个答案可能更有用。试试它所暗示的。我认为你没有抓住要点;函数是否为尾部递归并不取决于参数是什么,也不取决于参数中的任何内容可能会做什么。如果有什么不同,您可以将addnum与n-1一样对待,以确定sum是否为尾部递归。您链接的帖子中的第二个答案可能更有用。试试它的建议。如果你觉得这篇文章是重复的,我很抱歉。我看到了你链接的那篇文章,我只是不确定对尾部递归的定义是否有其他限制,这些限制在我读的所有使用原始数据类型的文章中都没有指定。谢谢你的澄清。@JohnMadon1234567890别担心,我很高兴你找到了问题的答案。如果你觉得这篇文章是重复的,我很抱歉。我看到了你链接的那篇文章,我只是不确定对尾部递归的定义是否有其他限制,这些限制在我读的所有使用原始数据类型的文章中都没有指定。谢谢你的澄清。@JohnMadon1234567890别担心,我很高兴你找到了问题的答案。