1

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

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

2

Re: Рекурсія.

Прошу

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

3 Востаннє редагувалося Joker (16.12.2014 00: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 00: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. Коли ви використовуєте рекурсію, змінні тільки заплутують.
Ну то таке, питання стилю.

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

10

Re: Рекурсія.

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

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

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

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

11

Re: Рекурсія.

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

Прихований текст
void print_str(const char* str)
{
    if (! *str) return;
    putchar(*str);
    return print_str(++str);
}

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

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);
   }

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);
    }
Прихований текст