Rekurencyjna funkcja obliczająca sumę cyfr

0

Napisz rekurencyjna funkcje obliczającą sumę cyfr podanej liczby nieujemnej. Gdzie zrobiłem błąd?

 #include <stdio.h>
int suma(int n)
{
    if (n > 0)
        return n;
    else
        return n % 10 + suma(n / 10);
}
int main()
{
    int n;
    scanf("%d", &n);
    printf("%d", suma(n));
    return 0;
}
3

Tutaj: if (n > 0). Przecież to nie ma sensu, bo ta funkcja zwróci za każdym razem podaną liczbę zamiast sumę cyfr. (No z wyjątkiem zera, dla którego wpadnie w nieskończoną rekurencję)

Ma być if (n == 0) bo 0 to warunek zakończenia rekurencji.

0

Lepsza wersja:

int fold_sum(int sum, int num) {
  if (num == 0) return sum;
  return fold_sum(sum + (num % 10), num / 10);
}

int sum(int num) {
  return fold_sum(0, num);
}

Ta wersja użyje w miarę możliwości kompilatora rekurencji ogonowej i nie będzie budowała głębokiego stosu. Powinna być równie szybka co wersja iteracyjna.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0