Funkcje rekurencyjne
Część sekcji Logika i przepływ programu ścieżki PHP w Coddy. Lekcja 8 z 68.
Rekurencja to technika programowania, w której funkcja wywołuje samą siebie, aby rozwiązać problem. Tworzy to zachowanie przypominające pętlę, ale zamiast używać tradycyjnych pętli, funkcja wielokrotnie wywołuje samą siebie ze zmodyfikowanymi parametrami, aż znajdzie rozwiązanie.
Każda funkcja rekurencyjna musi zawierać dwa niezbędne elementy, aby działać poprawnie:
Przypadek bazowy: To warunek, który zatrzymuje rekurencję. Bez niego funkcja wywoływałaby samą siebie w nieskończoność, powodując awarię programu. Przypadek bazowy określa, kiedy funkcja powinna zwrócić wynik zamiast wywoływać samą siebie ponownie.
Krok rekurencyjny: To miejsce, w którym funkcja wywołuje samą siebie z nieco zmodyfikowaną wersją pierwotnego problemu, stopniowo zbliżając się do przypadku bazowego.
Oto prosty przykład funkcji rekurencyjnej, która oblicza silnię:
<?php
function factorial($n) {
// Przypadek bazowy: silnia z 1 wynosi 1
if ($n <= 1) {
return 1;
}
// Krok rekurencyjny: n! = n * (n-1)!
return $n * factorial($n - 1);
}
echo factorial(5); // Wyświetla: 120
?>W tym przykładzie factorial(5) wywołuje factorial(4), które wywołuje factorial(3) i tak dalej, aż dotrze do factorial(1) (przypadku bazowego). Następnie wyniki mnożą się w odwrotnej kolejności: 1 × 2 × 3 × 4 × 5 = 120.
Wyzwanie
ŁatwyUtwórz funkcję rekurencyjną o nazwie sumDigits, która przyjmuje dodatnią liczbę całkowitą i zwraca sumę jej cyfr. Funkcja powinna używać rekurencji do rozkładania liczby cyfra po cyfrze.
Otrzymasz jedno wejście: dodatnią liczbę całkowitą. Odczytaj dane wejściowe, wywołaj swoją funkcję rekurencyjną z tą liczbą i wypisz sumę jej cyfr.
Format wejścia: Jeden wiersz zawierający dodatnią liczbę całkowitą
Oczekiwane wyjście: Suma wszystkich cyfr liczby
Spróbuj swoich sił
<?php
// Wczytaj dane wejściowe
$number = intval(fgets(STDIN));
// TODO: Utwórz tutaj funkcję rekurencyjną sumDigits
// Wywołaj funkcję i wypisz wynik
echo sumDigits($number);
?>Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i przepływ programu
1Zaawansowane funkcje
Funkcje anonimoweDomknięcia i „use”Funkcje strzałkoweFunkcje zwrotneUżywanie „call_user_func”Funkcje zmiennePrzekazywanie przez referencjęFunkcje rekurencyjnePowtórka: przegląd funkcji4Tablice wielowymiarowe
Tworzenie tablicy 2DDostęp do elementów tablicy 2DModyfikowanie elementów tablicy 2DIterowanie z użyciem zagnieżdżonych pętliAsocjacyjne tablice 2DPodsumowanie: ćwiczenie z prostą siatką2Zaawansowane operacje na tablicach
Dodawanie za pomocą 'array_push'Usuwanie za pomocą 'array_pop'Dodawanie za pomocą 'array_unshift'Usuwanie za pomocą 'array_shift'Łączenie tablic indeksowanychŁączenie tablic asocjacyjnychWyodrębnianie za pomocą 'array_slice'Wyszukiwanie wartości za pomocą 'in_array'Wyszukiwanie kluczy za pomocą 'array_search'Podsumowanie: ćwiczenie z playlistą3Sortowanie tablic
Sortowanie tablic indeksowanych rosnącoSortowanie tablic indeksowanych malejącoSortowanie tablic asocjacyjnych według wartościSortowanie tablic asocjacyjnych według kluczaSortowanie w kolejności naturalnejSortowanie niestandardowe za pomocą 'usort'Podsumowanie: sortowanie tabeli wynikówPoćwicz samodzielnie: Kompilator PHP online