Почему это значение в этой рекурсии показывает это значение? - PullRequest
0 голосов
/ 01 октября 2019

Мой код написан ниже ... Это код на C ++.

#include<bits/stdc++.h>
using namespace std;
int fun (int a)
{
    if (a>=0)
        return a+fun(a-2);
}

int main()
{
    int x=12;
    printf("%d",fun(x));
    return 0;
}

В этом коде я не должен предполагать увидеть вывод 42, а не вывод 40? Почему он показывает 40 вместо 42. Какая логика стоит за этим?

1 Ответ

0 голосов
/ 01 октября 2019

Я предполагаю, что ваш фактический код:

#include<bits/stdc++.h>
using namespace std;
int fun (int a)
{
    if (a>=0)
        return a+fun(a-2);
    return a; // may be missing.
}

int main()
{
    int x=12;
    printf("%d",fun(x));
    return 0;
}

Причиной, по которой этот код возвращает 40, является значение аргумента a, в последний раз называемое fun, равно -2. Потому что if (a>=0) верно, когда a==0. Таким образом, ваша программа рассчитывает 12+10+8+6+4+2+0+ -2 (равно 40).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...