Как рекурсивная функция работает внутри - PullRequest
0 голосов
/ 20 апреля 2020

В рекурсивной функции, разработанной с использованием java, ниже.

public class Base {
    public static void main(String[] arg) { 
        m1(4);      
    }

    public static void m1(int num) {    
        if(num>=1) {
            System.out.println("----A "+num);
            return num*m1(num-1);
        else {
            return 1;
        }
    }   
}

Здесь, при вызове m1 (num-1), как значение num присваивается num-1. Например, num = 4, в следующий раз значение num будет равно num = 3. Я имею в виду здесь, мы не будем назначать как num = 3, хотя мы вызываем функцию m1 (). При вызове функции m1 () она сохраняется в стеке, поэтому она становится f (3). Я могу понять, что. Но я запутался, как num-значение присваивается новому значению. Не могли бы вы объяснить?.

1 Ответ

1 голос
/ 20 апреля 2020

Если я правильно истолковал ваш вопрос, вы не слишком озадачены рекурсивной частью, вы более озадачены тем, как значение num присваивается num - 1 часть. Ответ на этот вопрос заключается в том, что num никогда не переназначается, по крайней мере, не в его собственной лексической области действия .

Что в сущности означает, что является различным значением «num» в каждом вызове функции m1 () в стеке вызовов (в этом случае они будут равны 4, 3, 2, 1 и 0 до завершения рекурсии). Переменная num не переназначается в вызове функции, потому что «num - 1» сам по себе является просто выражением, а не присваиванием. Значение num при каждом вызове функции в стеке вызовов на самом деле представляет собой отдельную переменную «num», и это связано с тем фактом, что java является «передачей по значению» .

В общем, если вы хотите улучшить свое понимание рекурсии, настоятельно рекомендуем проверить книгу "Маленький интриган" .

...