1

Тема: Рекурсія.

Допоможіть будь ласка. Не можу скласти функцію для суми всіх чисел в заданому діапазоні рекурсивно!

2

Re: Рекурсія.

Прошу

ціле i = начало;
ціле summResult = 0;
функція Summ (число) {
  i++; 
  якщо (i < кінця) {
    summResult += Summ(i);
  }
  як (i >= кінця) { виходимо; }
}
x

3 Востаннє редагувалося Joker (16.12.2014 01:42:46)

Re: Рекурсія.

http://cppstudio.com/post/418/

Спробуйте подумати і спершу вивести на екран Hello world за допомогою рекурсії!

p.s. Вибачте, не бачив повідомлення вище

4

Re: Рекурсія.

S(n, k) = n + S(n+1, k), де S - сума діапазону, n - нижня межа, k - верхня межа.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

5

Re: Рекурсія.

Joker написав:

Спробуйте подумати і спершу вивести на екран Hello world за допомогою рекурсії!

Задумався.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

6 Востаннє редагувалося Joker (16.12.2014 01:48:09)

Re: Рекурсія.

Задумався.

Що ви хотіли цим сказати?

Спробуйте подумати і спершу вивести на екран Hello world за допомогою рекурсії!

p.s. Я мав на увазі вивести цю фразу декілька разів.

7

Re: Рекурсія.

Chemist-i написав:

Прошу

ціле i = начало;
ціле summResult = 0;
функція Summ (число) {
  i++; 
  якщо (i < кінця) {
    summResult += Summ(i);
  }
  як (i >= кінця) { виходимо; }
}

1. Змінні, видимі за межами функції, — ніхт ґут.
2. Коли ви використовуєте рекурсію, змінні тільки заплутують.
Ну то таке, питання стилю.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

8

Re: Рекурсія.

Joker написав:

Задумався.

Що ви хотіли цим сказати?

Що задумався над рекурсивною формулою для Hello world.

Joker написав:

Спробуйте подумати і спершу вивести на екран Hello world за допомогою рекурсії!

p.s. Я мав на увазі вивести цю фразу декілька разів.

Який сенс робити це рекурсивно?

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

9

Re: Рекурсія.

quez написав:

1. Змінні, видимі за межами функції, — ніхт ґут.
2. Коли ви використовуєте рекурсію, змінні тільки заплутують.
Ну то таке, питання стилю.

Звик до автоіту, вже як є.

x

10

Re: Рекурсія.

Який сенс робити це рекурсивно?

Все ж це реально, хоча циклом буде простіше.

Метою цього завдання було навчитися працювати з рекурсією ( + сайт зверху).
Далі трішки подумати над формулою і рекурсією, щоб самостійно розв'язати задачу.

Хіба це не краще, ніж майже прямий розв'язок?

11

Re: Рекурсія.

Як варіант виведення рядка, якщо це допоможе.

Прихований текст

void print_str(const char* str)
{
    if (! *str) return;
    putchar(*str);
    return print_str(++str);
}

Я думаю починати розбиратись в рекурсії(якщо є на то бажання, в чому я сумніваюсь) треба з факторіалу і фібоначі. Бо заміна тривіального циклу рекурсією (привіт Хаскель) то вже на порядок складніше.

Maybe a = Just a | Nothing

12

Re: Рекурсія.

0x9111A написав:

Як варіант виведення рядка, якщо це допоможе.

Прихований текст

void print_str(const char* str)
{
    if (! *str) return;
    putchar(*str);
    return print_str(++str);
}

Я думаю починати розбиратись в рекурсії(якщо є на то бажання, в чому я сумніваюсь) треба з факторіалу і фібоначі. Бо заміна тривіального циклу рекурсією (привіт Хаскель) то вже на порядок складніше.

Якщо вже на те пішло ось ось простий і короткий варіант

Прихований текст

int  summ(int i, int n)  // де (і, n) -  низ та верх
   {
      if (n==i) return i;
      else n+summ(i,n);
   }

x

13

Re: Рекурсія.

Joker написав:

Який сенс робити це рекурсивно?

Все ж це реально, хоча циклом буде простіше.

Метою цього завдання було навчитися працювати з рекурсією ( + сайт зверху).
Далі трішки подумати над формулою і рекурсією, щоб самостійно розв'язати задачу.

Хіба це не краще, ніж майже прямий розв'язок?

Ви нагадуєте мені викладачів програмування, які дають завдання, щоб «навчитись працювати». Їм все одно, що це нелогічно, що так ніхто не робить. Рекурсивно варто розв’язувати задачі, які очевидним чином розбиваються на підзадачі, аналогічні основній. Завдання топікстартера є таким, і коли ми читаємо return n + sum(n+1, k), ми бачимо думку «Сума діапазону дорівнює сумі першого елемента і суми діапазону, що починається з другого елемента». Вивід тексту n раз до таких завдань не відноситься —  його очевидніше представляти в вигляді циклу, принаймні поки ми знаходимось в розділі C/C++, а не в розділі Haskell. Тому давати це завдання людині, яка ще не розібралась в тому, нащо потрібна рекурсія — це ще більше заплутувати її.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ

14

Re: Рекурсія.

Chemist-i написав:
0x9111A написав:

Як варіант виведення рядка, якщо це допоможе.

Прихований текст

void print_str(const char* str)
{
    if (! *str) return;
    putchar(*str);
    return print_str(++str);
}

Я думаю починати розбиратись в рекурсії(якщо є на то бажання, в чому я сумніваюсь) треба з факторіалу і фібоначі. Бо заміна тривіального циклу рекурсією (привіт Хаскель) то вже на порядок складніше.

Якщо вже на те пішло ось ось простий і короткий варіант

Прихований текст

int  summ(int i, int n)  // де (і, n) -  низ та верх
   {
      if (n==i) return i;
      else n+summ(i,n);
   }

По-перше, ретурн, а по-друге, стековерфлоў.

МАКЕ ЦКЯАІИЕ БЯЕАТ АБАІИ
Подякували: Chemist-i1

15

Re: Рекурсія.

quez, Ви абсолютно праві, дякую

Прихований текст

    int summ(int i, int n) // де (і, n) - низ та верх
    {
        if (n==i) return i;
        else return i+summ(i+1,n);
    }

Прихований текст
x