Рекурсивная функция

353
15 января 2017, 16:32

Дано натуральное число n. Выведите все числа от 1 до n. Вот , что выходит. Где ошибка?

int func(int );

int main()

{
    int n;
    cout << "n=";
    cin >> n;
    for (int i = 1; i <=n; i++)
    {
        cout << i << " ) " << func(n) << "\n";
    }
    system("pause");
    return 0;
}

int func(int n)
{
    if (n == 1)
        return 1;
    return func(n - 1);
}
Answer 1

Данная функция

int func(int n)
{
    if (n == 1)
        return 1;
    return func(n - 1);
}

всегда для значений больше 0 возвращает 1, так как это как раз условие выхода из рекурсии. А для значений меньше 0 имеет неопределенное поведение.:)

Кроме того, если в задании говорится о натуральном ряде чисел, то следует объявлять соответствующую переменную или параметр функции, как имеющий без-знаковый целый тип.

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

Все, что от вас требуется, это следующее

#include <iostream>
void func(unsigned int n)
{
    if (n)
    {
        func(n - 1);
        std::cout << n << std::endl;
    }
}
int main()
{
    unsigned int n;
    std::cout << "n = ";
    if (std::cin >> n && n != 0) func(n);
}

Вывод программы может выглядеть к примеру так

n = 5
1
2
3
4
5
Answer 2

Все проще:

void out(int n)
{
    if (n > 1) out(n-1);
    cout << n << endl;
}

int main(int argc, const char * argv[])
{
    int n;
    out((cout<<"n = ", cin >> n, n));
}
READ ALSO
Горизонтальный ScrollBar в QTreeView

Горизонтальный ScrollBar в QTreeView

Как можно включить отображение горизонтального ScrollBar в QTreeView с фиксированной шириной при выходе названия ветки за границы view'шки?

457
SQL выборка по дате

SQL выборка по дате

Пишу запрос на выборку ТОП-10 покупателейВывести покупателей за все время я смог запросто, но встал вопрос о сортировке по дате

379
Как сделать, чтобы DrawerLayout был поверх ActionBar?

Как сделать, чтобы DrawerLayout был поверх ActionBar?

Как сделать так, чтобы выдвижная панель выезжала на всю высоту экрана (высоту, а не ширину, с шириной все ясно)Я имею ввиду, чтобы она заезжала...

315