因此,在教程的帮助下,我编写了这个简单的代码。通过它我不太确定return faktor(tall-1)*tall会发生什么。

在return语句中,该方法将自行调用并返回一个值。首先会发生什么?它是先调用自身还是先返回值,或者它们都同时发生?

当它返回值时会发生什么呢?

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;
    }

}

最佳答案

我自己想知道它,知道它的最好方法是让程序找出来,所以我修改了代码以查看实际发生的情况。这是我修改过的代码(我用您的母语评论并写了代码,我认为我们生活在同一个国家/地区。

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


我们将得到faktor(4)的值,就像这样:

faktor(4) = faktor(3)*4


我们将对其余的“ faktor(int tall)”执行相同的操作,直到条件为假。

faktor(3) = faktor(2)*3
faktor(2) = faktor(1)*2


faktor(1)将返回1,因为tall等于1(因此条件为假)。用1代替faktor(1)

我们得到:

faktor(2) = 1*2 =2


将faktor(2)替换为2,我们得到

faktor(3)= 2 * 3 = 6


用6代替faktor(3),我们得到

faktor(4)= 6*4 = 24


最终,我们得到:

faktor(5) = 24*5 = 120


我希望这次足够清楚

我希望我已经回答了你的问题。请随时询问您是否还有其他问题。海因芬达格:)

08-05 17:13