1

Тема: C. Рекурсивна функція.

Взагалі не розумію рекурсивні функції. Допоможіть, будь ласка.
Умова: Знайти суму елементів одновимірного масиву. Останнім елементом масиву вважати 0.

Ось трішки накидав але я дійсно не розумію цю рекурсію ...

#include <stdio.h>
int main()
{
int i, n, mas[n],s;
printf("vvestu k-st elementiv masuvy: "); scanf("%i",&n);
for (i=0; i<n; i++) {
    printf("vvestu %i element: ",i); scanf("%i",&mas[i]);
}
i=0;
while (mas[i]!=0) {
    s+=sum(mas[i]);
    i++;
}
printf("suma= %i",sum(mas[i]));
return 0;
}

int sum(int x){
    int k=0;
    k+=sum(x);
    return k;
}

2 Востаннє редагувалося koala (19.11.2014 23:56:33)

Re: C. Рекурсивна функція.

Рекурсія - це дуже просто: треба записати, як з f(n-1) отримати f(n)... і, власне, все. Не забути тільки зупинитися. Як з суми масива на n-1 елементів отримати суму масива на n елементів? Правильно:

int sum(int ar[], int size)
{
  return ar[size-1]/*останній елемент*/+sum(ar, size-1)/*решта*/;
}

Тільки так воно не зупиниться і буде шукати суму -1, -2 і т.д. елементів. Виправляємо:

int sum(int ar[], int size)
{
  if( size>0)
    return ar[size-1]+sum(ar, size-1);
  else
    return 0;
}

3 Востаннє редагувалося DoneeX (20.11.2014 00:07:23)

Re: C. Рекурсивна функція.

Дякую)
А як тоді цю функцію записати правильно в main?

#include <stdio.h>
int main()
{
int i, n, mas[n],s;
printf("vvestu k-st elementiv masuvy: "); scanf("%i",&n);
for (i=0; i<n; i++) {
    printf("vvestu %i element: ",i+1); scanf("%i",&mas[i]);
}
i=0;
while (mas[i]!=0) {
    s+=sum(mas[i],n);
    i++;
}
printf("suma= %i",s);
return 0;
}

int sum(int ar[], int size) {
    if (size>0)
    return ar[size-1]+sum(ar,size-1);
    else
    return 0;
}

4

Re: C. Рекурсивна функція.

DoneeX написав:

Дякую)
А як тоді цю функцію записати правильно в main?

#include <stdio.h>
int main()
{
int i, n, mas[n],s;
printf("vvestu k-st elementiv masuvy: "); scanf("%i",&n);
for (i=0; i<n; i++) {
    printf("vvestu %i element: ",i+1); scanf("%i",&mas[i]);
}
i=0;
while (mas[i]!=0) {
    s+=sum(mas[i],n);
    i++;
}
printf("suma= %i",s);
return 0;
}

int sum(int ar[], int size) {
    if (size>0)
    return ar[size-1]+sum(ar,size-1);
    else
    return 0;
}

Перед main дописати:

int sum(int ar[], int size);
private void life(int time_of_sleep=min, ...)
Cogito, ergo sum.