Брза рекурзија (са примерима)

У овом чланку ћете научити да креирате рекурзивну функцију; функција која себе позива.

Функција која себе назива позната је као рекурзивна функција. А, ова техника је позната као рекурзија. Док креирате рекурзивну функцију, морате створити услов тако да се функција не позива у недоглед (бесконачно).

Како рекурзија ради у Свифту?

 фунц рекурсе () (// изјаве рекурсе ()) рекурсе () 

На доњој слици је приказано како рекурзија делује позивањем себе изнова и изнова.

На горњем дијаграму тока, рекурзија се извршава бесконачно. Међутим, готово у свим случајевима креирате рекурзију која се извршава све док се не испуни неки услов.

Да бисте спречили бесконачну рекурзију, користите рекурзивни позив унутар брзих условних изјава, нпр. Иф … елсе наредба.

Пример 1: Одштампајте Н позитивних бројева

 func countDownToZero(num: Int) ( print(num) if num> 0 ( countDownToZero(num: num - 1) ) ) print("Countdown:") countDownToZero(num:3) 

Када покренете следећи програм, излаз ће бити:

 Одбројавање: 3 2 1 0

У наведеном програму, изјава print("Countdown:")излази Цоунтдовн: у конзоли. А изјава countDownToZero(num:3)позива функцију која узима параметар Integer.

Наредба унутар функције се countDownToZero()извршава и ако је услов num> 0испуњен, функција countDownToZero()се поново позива као countDownToZero(num: num - 1).

Ако услов није испуњен, позив функције није завршен и рекурзија се зауставља.

Погледајмо ово у корацима

Кораци извршења
Кораци Позив функције Штампано нум> 0?
1 countDownToZero(3) 3 да
2 countDownToZero(2) 2 да
3 countDownToZero(1) 1 да
4 countDownToZero(0) 0 Не (завршава се)

Пример 2: Пронађите факторијел броја

 func factorial(of num: Int) -> Int ( if num == 1 ( return 1 ) else ( return num * factorial(of:num - 1) ) ) let x = 4 let result = factorial(of: x) print("The factorial of (x) is (result)") 

Када покренете следећи програм, излаз ће бити:

 Фактор од 4 је 24

Како овај пример функционише?

Погледајмо ово у корацима

Кораци извршења
Кораци Аргумент је прошао Изјава о повратку Вредност
1 4 return 4 * factorial(of:3) Фактор * (од: 3)
2 3 return 3 * factorial(of:2) Факторијел 4 * 3 * (од: 2)
3 2 return 2 * factorial(of:1) Факторијел 4 * 3 * 2 * (од: 1)
4 1 return 1 4 * 3 * 2 * 1

Обично се рекурзија користи као замена итерације када се решење проблема може наћи у отприлике два корака. Први корак тражи решење, ако не и поновити поступак.

Занимљиви Чланци...