Trójkąt Pascala rekurencyjnie

Odpowiedz Nowy wątek
MR22
2009-11-17 14:51
MR22
0

Witam

Mam napisać program który wyświetli mi trójkąt Pascala:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
itd

Sam temat trójkąta Pascala jest chyba oczywisty, natomiast problem mam w tym żeby skorzystać z rekurencji. Zrobienie tego iteracyjnie nie stanowi żadnego problemu, ale tutaj zaczynam się gubić.
Przetrzepałem google i forum i niestety nie natknąłem się na rozwiązanie z wykorzystaniem rekurencji. Pls help :)

Pozostało 580 znaków

bogdans_niezalogowan
2009-11-17 15:03
bogdans_niezalogowan
0

Rekurencyjny wzór na k-element w n-tym wierszu:
f(n,k) = f(n-1,k) + f(n-1,k-1)

Pozostało 580 znaków

MR22
2009-11-17 15:20
MR22
0

Wikipedię też przeczytałem i nie prosiłem o ogólny wzór tylko o konkretne rozwiązanie czyli np. funkcję rekurencyjną i jej wywołanie, chociaż jeżeli ktoś się pofatyguje i napisze kompletny kod to też nie będę narzekał :-)

Pozostało 580 znaków

bogdans_niezalogowan
2009-11-17 15:50
bogdans_niezalogowan
0

Jeżeli podany wzór Ci nie wystarcza toś wielki leń lub dureń.

int f(int n,int k)
{
   if(n==k || n==0)
      return 1;
   if(k==1 || k==n-1)
      return n;
   return f(n-1,k-1)+f(n-1,k);
}

Pozostało 580 znaków

Bart_niezalogowany
2009-11-18 00:27
Bart_niezalogowany
0

@Bogdan
czy przypadkiem nie zabrakło w Twoim kodzie else?

Pozostało 580 znaków

2009-11-18 00:47
Moderator

Rejestracja: 16 lat temu

Ostatnio: 7 minut temu

0

Nie bo instrukcja return jest skokiem. W związku z czym program w chwili napotkania returna od razu zwraca wartość funkcji.


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...

Pozostało 580 znaków

Bart_niezalogowany
2009-11-18 01:00
Bart_niezalogowany
0

a czy funkcję int można stosować, jeśli chcemy uzyskać jako wartość tablicę (dwuwymiarową chyba)?

Pozostało 580 znaków

MR22
2009-11-18 08:01
MR22
0

@Bogdan
Wszystko fajnie, napisz jeszcze jak to wywołać, z jakimi wartościami? Kiedy funkcja kończy swoje działanie skoro nie ma żadnego ograniczenia i można ją wywoływać praktycznie w nieskończoność?

A tak nawiasem mówiąc nazywanie kogoś durniem tylko dlatego że czegoś nie rozumie jest drobnym nietaktem.

Pozostało 580 znaków

bogdans_niezalogowan
2009-11-18 08:19
bogdans_niezalogowan
0

@MR22 napisał

Kiedy funkcja kończy swoje działanie skoro nie ma żadnego ograniczenia i można ją wywoływać praktycznie w nieskończoność?
My chyba patrzymy na inne funkcje.
W pierwszym wierszu wypisz 1
W drugim wierszu wypisz kolejno f(1,0) i f(1,1)
W trzecim wierszu wypisz f(2,0) f(2,1) f(2,2)
.......
W n-tym wierszu wypisz f(n-1,0),f(n-1,1),....,f(n-1,n-1). Możesz funkcję f(n,k) trochę skrócić

int f(int n,int k)
{
if(n==k || n==0)
return 1;
return f(n-1,k-1)+f(n-1,k);
}

P.S. Możesz się czuć urażony, ale moim zdaniem jest to bardzo proste. Jeśli zatem nie rozumiesz, to albo nawet nie próbowałeś, tzn. jest leniem, albo próbowałeś ...

Pozostało 580 znaków

MR22
2009-11-18 08:38
MR22
0

@Bogdan
z tego co rozumiem to trzeba ta funkcję wywoływać iteracyjnie tak?
Czyli cos w stylu:
for(int i=0; i<iloscWierszy; i++)
{
for(int j=0; j<iloscKolumn; j++)
printf("Element trójkąta: %d", f(i,j));
}

Czy tak wyglądałoby wywołanie tej funkcji?

Pozostało 580 znaków

bogdans_niezalogowan
2009-11-18 08:54
bogdans_niezalogowan
0

Tak. Zadbaj o odstępy między liczbami w jednym wierszu, i zapewnij by po zmianie wartości zmiennej i przejść do nowego wiersza na ekranie.

Pozostało 580 znaków

Odpowiedz

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