Numerowanie wierszy.

0

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

Co znaczy "numerować" ?

0

Obok każdego wiersza wypisywanego w drzewie wywołań rekurencyjnych ma być numer tegoż wywołania.

0

dałem radę.

kod, dla ciekawskich:

 #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)
{
	static int l=0;
	if(n == 0)
	 {
	 	l++;
        printf("%d",glebokosc);
        kropa(glebokosc);
        printf(",zwracam f(1), l=%d\n",l);
        return 1;
     }

    if(n == 1) 
	{
		l++;
        printf("%d",glebokosc);
        kropa(glebokosc);
        printf(",zwracam f(0), l=%d\n",l);
        return 1;
    }
l++;
printf("%d",glebokosc);
kropa(glebokosc);
printf(",obliczam f(%d)=f(%d)+f(%d), l=%d\n", n, n-1, n-2,l);
glebokosc++;
return f_re(n-1,glebokosc)+f_re(n-2,glebokosc);
}


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

Prawdopodobnie chodzi ci o jedno z dwóch:

#include <stdio.h>

unsigned f_re(unsigned n,unsigned *row,unsigned deep)
  {
   unsigned ret=n<2?1:f_re(n-2,row,deep+1)+f_re(n-1,row,deep+1);
   printf("%*u: f(%u)=%u;\n",deep+3,++*row,n,ret);
   return ret;
  }
 
unsigned f_er(unsigned n,unsigned *row,unsigned deep)
  {
   printf("%*u: f(%u);\n",deep+3,++*row,n);
   return n<2?1:f_er(n-2,row,deep+1)+f_er(n-1,row,deep+1);
  }
 
int main()
  {
   unsigned n,r=0;
   scanf("%u",&n);
   printf("Drzewo wywolan dla ciagu rekurencyjnego:\n");
   printf("Obliczony rekurencyjnie %d wyraz ciagu Fibonacciego wynosi: %d\n",n,f_re(n,&r,0));
   r=0;
   printf("Obliczony rekurencyjnie %d wyraz ciagu Fibonacciego wynosi: %d\n",n,f_er(n,&r,0));
   return 0;
  }

http://ideone.com/aoxXRr

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