Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗rsPmFnRc 275 of 373 menu
◀ ▶

Рекурсия функции в Rust

В программировании есть такое понятие, как рекурсия - это когда функция вызывает сама себя. Каждый следующий вызов должен получать задачу проще, и нужна явная остановка. Без нее цепочка вызовов не закончится.

Параметр при этом передают в саму функцию, но уже с более простым значением. Посчитаем сумму чисел от единицы до n. Пока n больше единицы, к нему прибавляют сумму для числа на единицу меньше:

fn func(n: i32) -> i32 { if n <= 1 { return n; } n + func(n - 1) } fn main() { println!("{}", func(4)); // выведет 10 }

Базовый случай n <= 1 обрывает цепочку: функция больше не вызывает сама себя и отдает текущее число. Дальше ответы складываются на обратном пути.

Учтите, что без условия остановки получится бесконечный вызов. Функцию нельзя запускать рекурсивно, если шаг не становится проще.

Факториал для малого аргумента устроен так же. Для типа i32 не берите число больше 12: уже следующее значение не помещается в этот тип.

fn fact(n: i32) -> i32 { if n <= 1 { return 1; } n * fact(n - 1) } fn main() { println!("{}", fact(5)); // выведет 120 }

Дано число:

let k = 3;

Напишите рекурсивный блок, который отдает сумму от 1 до k, и выведите результат.

Дан следующий код:

fn func(n: i32) -> i32 { if n <= 0 { return 0; } func(n - 1) }

Выведите результат для 3 и объясните стоп-условие.

С помощью рекурсии выведите на экран числа от 1 до 5 . В параметр каждого следующего вызова передавайте число на единицу больше.

Скажите, зачем в рекурсии нужен случай без нового вызова.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить