Отслеживая вывод, не мог понять это даже при отладке? - PullRequest
0 голосов
/ 21 ноября 2018

При вызове функции f4 как функция возвращает 6?я действительно не могу понять, как работает функция, если она просто не возвращает 1?из-за (n-1)

  #include <iostream>
    #include<cmath>
    #include<fstream>
    using namespace std;
    int x = 3;
    void f1(int, int &);

    int f4(int);

    int main()

    { 
        int x = 5; int y = 10;
        f1(x, y); 
        cout << x << "\t" << y << endl;
        x = 15; y = 20;
        f1(x++, x); 


        cout << x << "\t" << y << endl; 
        x = 3;
        cout << f4(x) << endl; 

        system("pause");
        return 0;
    }

    void f1(int a, int &b)
    {
        a *= 2; b += x;
        cout << a << "\t" << b << endl;
    }

    int f4(int n) {
        if (n == 1 || n == 0) 
            return n;
        else
            return n + f4(n - 1);
    }

Ответы [ 2 ]

0 голосов
/ 21 ноября 2018

рекурсия в двух словах ..

   int f4(int n) {
        if (n == 1 || n == 0) 
            return n;
        else
            return n + f4(n - 1);
 }

Ваш код утверждает, что когда n равно 1 или 0, просто возвращайте n, в противном случае добавьте n к результату функции.

, которая устанавливаетдо рекурсивного стека, где первый вызов n = 3, и это рекурсивно.при следующем вызове n = 2 и это повторяется.при следующем вызове n = 1, и он возвращает , а также остальную часть стека, ведущую к 1 + 2 + 3, что равно 6.

0 голосов
/ 21 ноября 2018

Функция f4 является рекурсивной.Этот вызов с номером, отличным от 1 или 0, вызовет повторный вызов.Вы называете это с 3, так что компилятор (упрощенный) видит

f4(3) => 3 + f4(2) => 3 + 2 + f4(1) => 3 + 2 + 1 => 5 + 1 => 6
...