Рекурзивне функције – решени задаци

1. Написати рекурзивну функцију која одређује faktorijel . У главном програму применити дату функцију.

#include<stdio.h>
int fakt(int n)
{
	int i,f=1;
	if(n>1)f=n*fakt(n-1);
	return f;
}
int main()
{
	int n,k;
	printf("unesi n");scanf("%d",&n);
	k=fakt(n);
	printf("faktorijel=%d",k);
	return 0;
}

2. У математици биномни коефицијент природног броја n и целог броја k дефинисан је као природан број: bk1 и bk2 ако је k<0 или k>n. Биномни коефицијенти су коефицијенти у развоју бинома Created with GIMP (одатле и назив): Created with GIMP

нпр. за n=2 имамо Created with GIMP => коефицијенти су: 1 2 1

за n=3 imamo Created with GIMP => коефицијенти су: 1 3 3 1

Паскалов троугао приказује биномне коефицијенте за биноме степена од 0 до n.

Написати рекурзивну функцију за израчунавање датог биномног коефицијента (bk7 ) . У главном програму, користећи дату функцију исписати Паскалов троугао (Паскалов троугао садржи све биномне коефицијенте за свако n од 0 до nmax, где је nmax димензија троугла). За nmax=10 Паскалов троугао изгледа као на слици:

paskalovtrougao

#include<stdio.h>
int BK(int n, int k)
{
    	if(n<0 || k<0 || k>n) return -1;
    	else
	{
        if(n==0 || k==0 || k==n) return 1;
        else return BK(n-1,k)+BK(n-1,k-1);
    	}
}
int main()
{
	int i,j,n;
	printf("unesi n");scanf("%d", &n);
	printf("paskalov trougao\n");
	for(i=0;i<n;i++)
	{
        for(j=0;j<n-i;j++)printf("   ");
	    for(j=0;j<=i;j++)
			if(BK(i,j)==-1)printf("greska");
           	else printf("  %d   ", BK(i,j));
        printf("\n");
    }
    return 0;
}

3. Дефинисати рекурзивну функцију која израчунава вредност квадратног корена према рекурзивној формули: koren Као параметре функције користити x и n, при чему n представља број корака рекурзије који ће се користити. Написану функцију тестирати у главном програму тако што ће се приказати вредност добијена овом функцијом и вредност добијена применом математичке функције sqrt.

#include<stdio.h>
#include<math.h>
double koren(double x, int n)
{
	double a=1;
	if(n==1)a=(a+x/a)/2;
	else a=(koren(x,n-1)+x/koren(x,n-1))/2;
	return a;
}
int main()
{
	double x,k1,k2;
	int n;
	printf("unesi broj x");scanf("%lf",&x);
	printf("unesi broj koraka konverzije");scanf("%d",&n);
	k1=sqrt(x);
	k2=koren(x,n);
	printf("koren prema funkciji sqrt=%f,\nkoren prema rekurzivnoj formuli=%f",k1,k2);
	return 0;
}

Оставите одговор

Попуните детаље испод или притисните на иконицу да бисте се пријавили:

WordPress.com лого

Коментаришет користећи свој WordPress.com налог. Одјавите се /  Промени )

Google+ photo

Коментаришет користећи свој Google+ налог. Одјавите се /  Промени )

Слика на Твитеру

Коментаришет користећи свој Twitter налог. Одјавите се /  Промени )

Фејсбукова фотографија

Коментаришет користећи свој Facebook налог. Одјавите се /  Промени )

Повезивање са %s