Funkcja rekurencyjna sumy szeregu przemiennego

0

Hej:)
Niedawno opracowałam algorytm funkcji rekurencyjnej która ma zwrócić sumę ciągu 1+1/2+1/3+...+1/n (n wprowadza użytkownik) wygląda on tak:

float sum(int n){
if(n==1) return 1.0;
else return sum(n-1)+1.0/n;
}

zastanawiam się w jaki sposób można by było przekształcić tą funkcję rekurencyjną by liczyła sumę ciągu przemiennego tzn.:
1-1/2+1/3-1/4+....+1/n

ja bym zaproponowała coś takiego:

float sum(int n){
if(n==1) return 1.0;
else if(n%2==0) return sum(n-1)-1.0\n;
else return sum(n-1)+1.0/n;
}

Pytanie tylko czy coś takiego przejdzie i będzie poprawnie liczyło sumę? Nie potrzebuję pełnego programu interesuje mnie tylko ta część rekurencyjna.

0
#include <stdio.h>

float sum(unsigned n)
  {
   return n<=1?1:sum(n-1)+1.0/n;
  }

int main()
  {
   unsigned i;
   for(i=1;i<=10;++i) printf("sum(%d)=%f;\n",i,sum(i));
   return 0;
  }
0

Witam, mam takie pytanie. Dlaczego w poniższej funkcji rekurencyjnej ciągu przemiennego:

float sum(int n)
{
	if(n==1) return 1;
	else return (1.0/n)-sum(n-1); 
}

suma ta jest liczona: 1 - 1/2 + 1/3 - ... ,
przecież rekurencyjnie wychodząc z każdego zapętlenia powinno być: 1 - 1/2 - 1/3 - ... .
I jaka jest różnica między: return (1.0/n)-sum(n-1), a return sum(n-1)-(1.0/n)?
Mógłby mi ktoś to wytłumaczyć krok po kroku. Z góry wielkie dzięki.

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