38960

38960



81


DALSZE INFORMACJE

Przekazywanie parametrów

Gdy wywołujemy funkcję, wartość argumentów, z którymi ją wywołujemy, jest kopiowana do funkcji. Kopiowana — to znaczy, że nie możemy normalnie zmienić wartości zewnętrznych dla funkcji zmiennych. Formalnie mówi się, że w (' argumenty są przekazywane przez wartość, czyli wewnątrz funkcji operiyemy tylko na ich kopiach.

Możliwe jest modyfikowanie zmiennych przekazywanych do funkcji jako parametry ale do tego w C potrzebne są wskaźniki.

Funkcje rekurencyjne

Język C ma możliwość tworzenia tzw. funkcji rckurencyjnych. Jest to funkcja, która w swojej własnej definicji (ciele) wywołuje samą siebie. Najbardziej klasycznym przykładem może tu być silnia. Napiszmy sobie zatem naszą funkcję rekurencyjną. która oblicza silnię:

int silnia (int liczba)

{

int sil;

if (liczba<0) return 0; /* wywołanie jest bezsensowne, */

/* zwracamy 0 jako kod błędu */ if (liczba««0 II liczba«l) return 1; sil = liczba*silnia(liczba-l); return sil;

Musimy być ostrożni przy funkcjach rckurencyjnych, gdyż łatwo za ich i>omocą utworzyć funkcję, która łjędzie sama siebie wywoływała w nieskończoność, a co za tym idzie będzie zawieszała program. Tutaj pierwszymi instrukcjami if ustalamy “warunki stopu", gdzie kończy się wywoływanie funkcji przez samą siebie, a następnie określamy, jak funkcja będzie wywoływać samą siebie (odjęcie jedynki od argumentu, co do którego wiemy, że jest dodatni, gwarant uje, że dojdziemy do warunku stopu w skończonej liczbie kroków).

Warto też zauważyć, że funkcje rekurencyjne czasami mogą być znacznie wolniejsze niż jKniejście nierekurencyjne (iteracyjne, przy użyciu pętli). Flagowym przykładem może tu być funkcja obliczająca wyrazy ciągu Fibonacciego:

#include <stdio.h>

unsigned count;

unsigned fib.rec(unsigned n) {

++count;

return n<2 ? n : (fib_rec(n-2) + fib_rec(n-l));

>

unsigned fib.it (unsigned n) { unsigned a ■ 0, b ■ 0, c ■ 1;

♦♦count;

if (!n) return 0;



Wyszukiwarka

Podobne podstrony:
Image419 parametry układu przedstawiono w tablicy 4.41. Czas trwania impulsu wyjściowego jest funkcj
przetną się pod kątem prostym? b) Dla jakich wartości parametru a € R, wykresy funkcji y = 10.3.
Rozwiązywanie z.adań optymalizacji 99 Do wymiany informacji o parametrach funkcji przeprowadzających
60 4 Zadanie 619 Wyznacz wszystkie wartości parametru t dla których funkcja liniowa f(x) = (1 — 111
89521 s32 33 32 8. Wyznaczyć wartości parametru b tak, aby funkcja/(*) = sin2x dla x < 0, bx dla
Nazwy zmiennych i informacje o nich można uzyskać wywołując funkcje who i whos. Usunięcie zmiennej z
83 DALSZE INFORMACJE W tym przypadku nic jesteśmy w stanie zamienić a i b miejscami, Ik> obie fun
ile liczb Argumenty funkcji x
Parametry impulsów (czas impulsu, wartość amplitudy) i czas przerwy między impulsami mogą być regulo

więcej podobnych podstron