Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Рекурсія | Методи
Java Extended

bookРекурсія

Як легко зламати свій код?

Чому це може зламати код? Тому що це може призвести до нескінченної рекурсії, яка безупинно споживатиме пам'ять і знижуватиме продуктивність пристрою. То навіщо взагалі потрібна рекурсія? У деяких випадках рекурсія може бути корисною, але її слід використовувати обережно. Наприклад, рекурсія може замінити цикл while. Розглянемо приклад використання рекурсії для обчислення суми всіх чисел до числа, переданого як параметр:

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Метод calculateSum() викликає сам себе з меншими значеннями. Також маємо вихід з цієї рекурсії, коли змінна num стає нульовою. Цей метод обчислює суму всіх чисел від 1 до параметра, у нашому випадку 5. Розглянемо блок-схему, яка демонструє, як працює рекурсія на прикладі цього методу:

Наведений вище приклад демонструє, як метод викликає сам себе з меншими значеннями, і коли досягає нуля, повертається назад, підсумовуючи значення. Також можна побачити, як виконується тіло блоку if, де до результату виклику методу з меншим значенням додається num. Проміжні значення після кожного виклику методу вказані біля стрілок.

Чи можна уникнути використання рекурсії?

Рекурсію також можна замінити звичайним циклом. Розглянемо приклад, де спочатку використовується рекурсивний метод, а потім цикл for для виконання тієї ж операції:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Тут показано, як ми замінюємо наш рекурсивний метод звичайним циклом for, використовуючи змінну i для збільшення result на i кожного разу, доки не досягнемо заданого числа num, яке є параметром методу.

Висновок

Отже, рекурсивні методи можуть бути корисними, але й ризикованими. Рекурсію часто можна замінити циклами, і хоча вона може спростити певні завдання, вона також може спричинити проблеми, якщо використовувати її необережно. Якщо ви вирішили використовувати рекурсію, навіть маючи досвід, обов'язково дотримуйтеся обережності.

1. Що таке рекурсія в Java?

2. Що краще використовувати: рекурсію чи звичайний цикл?

question mark

Що таке рекурсія в Java?

Select the correct answer

question mark

Що краще використовувати: рекурсію чи звичайний цикл?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Awesome!

Completion rate improved to 2.63

bookРекурсія

Свайпніть щоб показати меню

Як легко зламати свій код?

Чому це може зламати код? Тому що це може призвести до нескінченної рекурсії, яка безупинно споживатиме пам'ять і знижуватиме продуктивність пристрою. То навіщо взагалі потрібна рекурсія? У деяких випадках рекурсія може бути корисною, але її слід використовувати обережно. Наприклад, рекурсія може замінити цикл while. Розглянемо приклад використання рекурсії для обчислення суми всіх чисел до числа, переданого як параметр:

Main.java

Main.java

copy
1234567891011121314151617181920
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below System.out.println(calculateSum(5)); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Метод calculateSum() викликає сам себе з меншими значеннями. Також маємо вихід з цієї рекурсії, коли змінна num стає нульовою. Цей метод обчислює суму всіх чисел від 1 до параметра, у нашому випадку 5. Розглянемо блок-схему, яка демонструє, як працює рекурсія на прикладі цього методу:

Наведений вище приклад демонструє, як метод викликає сам себе з меншими значеннями, і коли досягає нуля, повертається назад, підсумовуючи значення. Також можна побачити, як виконується тіло блоку if, де до результату виклику методу з меншим значенням додається num. Проміжні значення після кожного виклику методу вказані біля стрілок.

Чи можна уникнути використання рекурсії?

Рекурсію також можна замінити звичайним циклом. Розглянемо приклад, де спочатку використовується рекурсивний метод, а потім цикл for для виконання тієї ж операції:

Main.java

Main.java

copy
123456789101112131415161718192021222324252627282930313233
package com.example; public class Main { // main method to run the application public static void main(String[] args) { // do not modify the code below int num = 5; // printing the result of the recursive sum calculation System.out.println("Result using recursion: " + calculateSum(num)); int result = 0; // calculating the sum using a for-loop for (int i = 1; i <= num; i++) { result = result + i; } // printing the result of the sum calculation using the for-loop System.out.println("Result using for-loop: " + result); } // method to calculate the sum of numbers from 1 to num using recursion static int calculateSum(int num) { // if num is greater than 0, recursively calculate the sum if (num > 0) { num = num + calculateSum(num - 1); } else { return 0; } return num; } }

Тут показано, як ми замінюємо наш рекурсивний метод звичайним циклом for, використовуючи змінну i для збільшення result на i кожного разу, доки не досягнемо заданого числа num, яке є параметром методу.

Висновок

Отже, рекурсивні методи можуть бути корисними, але й ризикованими. Рекурсію часто можна замінити циклами, і хоча вона може спростити певні завдання, вона також може спричинити проблеми, якщо використовувати її необережно. Якщо ви вирішили використовувати рекурсію, навіть маючи досвід, обов'язково дотримуйтеся обережності.

1. Що таке рекурсія в Java?

2. Що краще використовувати: рекурсію чи звичайний цикл?

question mark

Що таке рекурсія в Java?

Select the correct answer

question mark

Що краще використовувати: рекурсію чи звичайний цикл?

Select the correct answer

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7
some-alt