Menu
Coddy logo textTech

Funkcja rekurencyjna

Lekcja 8 z 17 w kursie Funkcje w C w Coddy.

Funkcja rekurencyjna to funkcja, która wciąż wywołuje samą siebie.

Znanym przykładem zastosowania tej funkcji jest obliczanie silni liczby. 

Wzór na silnię to n!=1×2×…×n. 

Aby obliczyć silnię liczby, musimy pomnożyć przez siebie wszystkie liczby od 1 do n. 

Na przykład:

4!=1×2×3×4=24

Możemy zdefiniować funkcję rekurencyjną w ten sposób:

int fact(int n) {
   if (n == 1) {
       return 1;
   }
   return n * fact(n - 1);
}

Wyobraź sobie, że masz schody. Aby zacząć się wspinać, stajesz na parterze (stopień 0). W funkcji rekurencyjnej ten punkt początkowy nazywa się przypadkiem bazowym. To w tym miejscu funkcja przestaje wywoływać samą siebie i zwraca wartość.

W przykładzie z silnią przypadkiem bazowym jest sytuacja, gdy nnn (liczba) wynosi 1. Silnia z 1 wynosi po prostu 1, więc funkcja zwraca 1 bez wykonywania dalszych obliczeń.

Najpierw sprawdzamy, czy liczba jest równa jeden:

if (n == 1) {
   return 1;
}

Wywołania rekurencyjne:

 

Dla każdej liczby większej niż 1 funkcja korzysta z mniejszych wersji samej siebie. Wywołuje samą siebie z argumentem n−1 (o jeden stopień niżej). To jest wywołanie rekurencyjne:

return n * fact(n - 1);

Pomyśl o tym jak o wspinaniu się po schodach. Aby wejść na stopień 5, najpierw musisz wejść na stopień 4, potem na stopień 3 i tak dalej. Każde wywołanie rekurencyjne przypomina wejście o jeden stopień wyżej.

challenge icon

Wyzwanie

Łatwy

Zdefiniuj funkcję rekurencyjną:

  • Napisz funkcję o nazwie countdown, która przyjmuje parametr będący liczbą całkowitą n.
  • Wewnątrz tej funkcji wypisz bieżącą wartość n.
  • Jeśli n jest większe niż 0, rekurencyjnie wywołaj countdown z argumentem n - 1.
  • Jeśli n jest równe 0 lub mniejsze, wypisz "Blastoff!".

Przykład: jeśli liczba wynosi 3, wynik powinien wyglądać tak:

3
2
1
Blastoff!

 

Spróbuj swoich sił

#include <stdio.h>

// Zdefiniuj funkcję countdown


int main() {
  int start = 5;
  // Wywołaj funkcję
  
 
  return 0;
}

Wszystkie lekcje w sekcji Funkcje w C

Poćwicz samodzielnie: Kompilator C online