Java 当方法调用自身的return语句时会发生什么?递归。
所以我在教程的帮助下编写了这个简单的代码。经历了这一切,我不太确定faktortall-1*高的回报会发生什么 在return语句中,该方法调用自身并返回一个值。先发生什么?它是先调用自身,还是先返回值,还是两者同时发生 当它返回值时会发生什么Java 当方法调用自身的return语句时会发生什么?递归。,java,recursion,Java,Recursion,所以我在教程的帮助下编写了这个简单的代码。经历了这一切,我不太确定faktortall-1*高的回报会发生什么 在return语句中,该方法调用自身并返回一个值。先发生什么?它是先调用自身,还是先返回值,还是两者同时发生 当它返回值时会发生什么 package enkelrekursjon1; public class Enkelrekursjon1 { public static void main(String[] args) { System.out.print
package enkelrekursjon1;
public class Enkelrekursjon1 {
public static void main(String[] args) {
System.out.print(faktor(3));
}
private static int faktor(int tall){
System.out.print(tall);
if (tall != 1){
return faktor(tall - 1)*tall;
}
return 1;
}
}
它的工作方式与返回值的return语句的工作方式相同: 在本例中,将对表达式求值faktortall-1*toll 该值将返回给调用方 它不可能在计算表达式之前返回,因为没有要返回的值 因此,在您的情况下,如果您有call faktor5,那么您将得到以下调用堆栈:
faktor(5)
-> calls faktor(4)
-> calls faktor(3)
-> calls faktor(2)
-> calls faktor(1)
-> returns 1
-> returns 1 * 2 (i.e. 2)
-> returns 2 * 3 (i.e. 6)
-> returns 6 * 4 (i.e. 24)
-> returns 24 * 5 (i.e. 120)
它的工作方式与返回值的return语句的工作方式相同: 在本例中,将对表达式求值faktortall-1*toll 该值将返回给调用方 它不可能在计算表达式之前返回,因为没有要返回的值 因此,在您的情况下,如果您有call faktor5,那么您将得到以下调用堆栈:
faktor(5)
-> calls faktor(4)
-> calls faktor(3)
-> calls faktor(2)
-> calls faktor(1)
-> returns 1
-> returns 1 * 2 (i.e. 2)
-> returns 2 * 3 (i.e. 6)
-> returns 6 * 4 (i.e. 24)
-> returns 24 * 5 (i.e. 120)
这是一个递归结构。它使用条件
if(tall != 1)
作为基本情况。因此,该方法将通过并做一些工作,检查高度是否等于1,如果不等于1,它将通过并再次对数据进行操作。依此类推,直到基本情况满足tall==1
希望这有帮助这是一个递归结构。它使用条件
if(tall != 1)
作为基本情况。因此,该方法将通过并做一些工作,检查高度是否等于1,如果不等于1,它将通过并再次对数据进行操作。依此类推,直到基本情况满足tall==1
希望这有助于首先,如果条件为true,该方法将调用自身。该方法仅在高度达到1时返回。首先,如果条件为true,该方法将调用自身。该方法只有在tall达到1时才会返回。我自己也很想知道,知道它的最好方法是让程序找到它,所以我修改了您的代码以查看实际发生的情况。这是我修改的代码,我用你的母语评论和写的,我想我们生活在同一个国家。呃,我叫诺尔斯克狗。哈哈
public class EnkelRekursjon1 {
private static String funksjonNavn= "";
private static int resultat=0;
public static void main(String[] args) {
int tall = 3;
System.out.print(tall+"! = "+faktor(3)); // resultat printes etter rekursjon
}
private static int faktor(int tall){
funksjonNavn="Faktor("+tall+")";
System.out.println(tall);
//finn hvilken funksjon vi er.
System.out.println("Funksjonen kaller "+ funksjonNavn);
if (tall != 1){
resultat= faktor(tall - 1)*tall;
System.out.println("Reusltatet er "+ resultat);
return resultat;
}
System.out.println("-------------------------------");
//finn resultat for hver "rekursjon"
System.out.println("Reusltatet er "+ (resultat+1));
//blir 1* 0 her tror jeg, så funksjonen returnerer 1 istedenfor 0
return 1;
}
}
结果如下:
如果您想手动评估它,它将如下所示
faktor(5) = faktor(4)*5
我们将得到faktor4的值,它是这样的:
faktor(4) = faktor(3)*4
我们将对其余的faktorint Toll做同样的处理,直到条件为假
faktor(3) = faktor(2)*3
faktor(2) = faktor(1)*2
faktor1将返回1,因为高度等于1,因此条件为false。将faktor1替换为1
我们得到:
faktor(2) = 1*2 =2
用2代替faktor2,我们得到
faktor(3)= 2 * 3 = 6
用6代替faktor3,我们得到
faktor(4)= 6*4 = 24
最后,我们得到:
faktor(5) = 24*5 = 120
我希望这次足够清楚
我希望我已经回答了你的问题。如果您还有其他问题,请随时提问。Ha ein fin dag:我自己也很想知道,最好的办法是让程序找到它,所以我修改了你的代码,看看实际发生了什么。这是我修改的代码,我用你的母语评论和写的,我想我们生活在同一个国家。呃,我叫诺尔斯克狗。哈哈
public class EnkelRekursjon1 {
private static String funksjonNavn= "";
private static int resultat=0;
public static void main(String[] args) {
int tall = 3;
System.out.print(tall+"! = "+faktor(3)); // resultat printes etter rekursjon
}
private static int faktor(int tall){
funksjonNavn="Faktor("+tall+")";
System.out.println(tall);
//finn hvilken funksjon vi er.
System.out.println("Funksjonen kaller "+ funksjonNavn);
if (tall != 1){
resultat= faktor(tall - 1)*tall;
System.out.println("Reusltatet er "+ resultat);
return resultat;
}
System.out.println("-------------------------------");
//finn resultat for hver "rekursjon"
System.out.println("Reusltatet er "+ (resultat+1));
//blir 1* 0 her tror jeg, så funksjonen returnerer 1 istedenfor 0
return 1;
}
}
结果如下:
如果您想手动评估它,它将如下所示
faktor(5) = faktor(4)*5
我们将得到faktor4的值,它是这样的:
faktor(4) = faktor(3)*4
我们将对其余的faktorint Toll做同样的处理,直到条件为假
faktor(3) = faktor(2)*3
faktor(2) = faktor(1)*2
faktor1将返回1,因为高度等于1,因此条件为false。将faktor1替换为1
我们得到:
faktor(2) = 1*2 =2
用2代替faktor2,我们得到
faktor(3)= 2 * 3 = 6
用6代替faktor3,我们得到
faktor(4)= 6*4 = 24
最后,我们得到:
faktor(5) = 24*5 = 120
我希望这次足够清楚
我希望我已经回答了你的问题。如果您还有其他问题,请随时提问。HAEIN fin dag:在返回之前,它是否必须循环通过每个faktortall-1*高?“我还不明白。”戴维兰德:你说的在它被命名之前是什么意思?在你被称为什么之前?你的评论很不清楚。。。您是否尝试过逐步调试代码,或添加日志记录?这些可能是理解发生了什么的最简单的方法。我的意思是我很抱歉。我编辑。是的,我试着一步一步地检查我的代码,但有一点我误解了,这不正确。@DavidLund:从你的评论中不清楚你不理解什么,或者你的意思是什么,这不正确不幸的是:如果你输入5,好的,它打印出5,这是可以的,然后返回20?5-1*5到哪里?然后用数字4再次调用自己并打印出4。在返回之前,它是否必须循环遍历每个faktortall-1*高?“我还不明白。”戴维兰德:你说的在它被命名之前是什么意思?在你被称为什么之前?你的评论
很不清楚。。。您是否尝试过逐步调试代码,或添加日志记录?这些可能是理解发生了什么的最简单的方法。我的意思是我很抱歉。我编辑。是的,我试着一步一步地检查我的代码,但有一点我误解了,这不正确。@DavidLund:从你的评论中不清楚你不理解什么,或者你的意思是什么,这不正确不幸的是:如果你输入5,好的,它打印出5,这是可以的,然后返回20?5-1*5到哪里?然后再次用数字4呼叫自己并打印出4。哈,维博尔·贝格,我是挪威人,såkult!我想我会试着看一段youtube视频,看看会发生什么。希望有人能帮我画出来。。我不确定,但结果的截图是否很不清楚?顺便说一句,在påfb之前,jeg har lag deg。这是我的荣幸。塔克:屏幕截图有点不清楚,但不是什么大问题,因为我可以用你的代码自己打印出来,但很明显,其中涉及到堆栈,所有这些,在幕后有一些魔力,所以我不确定书面解释是否有帮助。当然我可以把你加入facebookJa,vi bor begge I norge,såkult!我想我会试着看一段youtube视频,看看会发生什么。希望有人能帮我画出来。。我不确定,但结果的截图是否很不清楚?顺便说一句,在påfb之前,jeg har lag deg。这是我的荣幸。塔克:屏幕截图有点不清楚,但不是什么大问题,因为我可以用你的代码自己打印出来,但很明显,其中涉及到堆栈,所有这些,在幕后有一些魔力,所以我不确定书面解释是否有帮助。当然,我可以在facebook上添加你