5. Рекурсия
Функция рекурсии — это функция, которая вызывает сама себя.
Факториал!
func factorial(_ n:Int) -> Int { if(n > 1){ return n * factorial(n - 1) } else { return 1 } } print(factorial(5))
X^n
func toThePowerOfN(_ X:Int, _ n:Int) -> Int { if(n > 1){ return X * toThePowerOfN(X, n - 1) } else { return X } } print(toThePowerOfN(2,5)) //2^5
Нахождение числа Фибоначчи
func fibonacciNumber(_ n:Int) -> Int { if(n == 0){ return 0 } else if(n == 1) { return 1 } else { return fibonacciNumber(n-2) + fibonacciNumber(n-1) } } print(fibonacciNumber(10))
Вычисление длины строки
func StringLengthCalculation(_ str:String) -> Int { if str == "" { return 0 } else { var str_temp = str str_temp.remove(at: str_temp.startIndex) return 1 + StringLengthCalculation(str_temp) } } StringLengthCalculation("asdfddddddg")
Выходная строка в обратном порядке
func reverse_String(_ str:String) -> String { if str == "" { return "" } else { let str_last = str[str.index(before: str.endIndex)] let str_remain = str[str.startIndex ..< str.index(before:str.endIndex)] return String(str_last) + reverse_String(String(str_remain)) } } reverse_String("abcdef")
Получение двоичного числа
func binaryNumber(_ number:Int) -> String { if number < 2 { return String(number) } else { return binaryNumber(number / 2) + String(number%2) } } binaryNumber(546)
Последовательная сортировка
func SequentialSearch (_ data:[Int],_ begin:Int,_ end:Int,_ target:Int) -> Int { if begin > end { return -1 } else if target == data[begin] { return begin } else { return SequentialSearch(data, begin+1, end, target) } } SequentialSearch([1,2],0,1,2)
Бинарный поиск
func binarySearch (_ data:[Int],_ begin:Int,_ end:Int,_ target:Int) -> Int { if begin > end { return -1 } else { let middle = (begin+end)/2 if data[middle] == target { return middle } else if target > data[middle] { return binarySearch(data, middle+1, end, target) } else { return binarySearch(data, begin, middle, target) } } } binarySearch([1,2,3,4,5,6],0,5,3)