Mam problem z funkcją zliczającą wiersze -> Po pierwszym wywołaniu rekurencji:
return f_re(n-1,glebokosc,l)+f_re(n-2,glebokosc,l);
zaczyna źle numerować. Nie wiem jak to ominąć. Pomożecie?
Dodam, że nie można stosować zmiennych globalnych.
Kod do całości:
#include<stdio.h>
int f_it(int n)
{
if(n==0) return 0;
int i,a=1,b=1;
for(i=0; i<n-2; i++)
{
a+=b;
b=a-b;
a-=b;
b+=a;
}
return b;
}
int kropa(int x)
{
int i;
for (i=0;i<x;i++)
printf(".");
}
int f_re(int n,int glebokosc,int l)
{
if(n == 0)
{
printf("%d",glebokosc);
kropa(glebokosc);
l++;
printf(",zwracam f(1), l=%d\n",l);
return 1;
}
if(n == 1)
{
printf("%d",glebokosc);
kropa(glebokosc);
l++;
printf(",zwracam f(0), l=%d\n",l);
return 1;
}
printf("%d",glebokosc);
kropa(glebokosc);
l++;
printf(",obliczam f(%d)=f(%d)+f(%d), l=%d\n", n, n-1, n-2,l);
glebokosc++;
return f_re(n-1,glebokosc,l)+f_re(n-2,glebokosc,l);
}
void main()
{
int n;
scanf(" %d",&n);
printf("Obliczony iteracyjnie %d wyraz ciagu Fibonacciego wynosi: %d\n",n,f_it(n));
printf("Drzewo wywolan dla ciagu rekurencyjnego:\n");
printf("Obliczony rekurencyjnie %d wyraz ciagu Fibonacciego wynosi: %d",n,f_re(n,0,0));
}