Рекурсия 5 примеров, помогите пожалуйста срочно
Ответы
Вот пример 5 задач и их реализации с помощью рекурсии. Так как язык программирования Вы не указали - я использую Java.
1. Дано натуральное число n. Выведите все числа от 1 до n.
public class Solution {
public static String recursion(int n) {
// Базовый случай
if (n == 1) {
return "1";
}
// Шаг рекурсии / рекурсивное условие
return recursion(n - 1) + " " + n;
}
public static void main(String[] args) {
System.out.println(recursion(10)); // вызов рекурсивной функции
}
}
2. Даны два целых числа A и В (каждое в отдельной строке). Выведите все числа от A до B включительно, в порядке возрастания, если A < B, или в порядке убывания в противном случае.
public class Solution {
public static String recursion(int a, int b) {
// основное условие задачи
if (a > b) {
// Базовый случай
if (a == b) {
return Integer.toString(a);
}
// Шаг рекурсии / рекурсивное условие
return a + " " + recursion(a - 1, b);
} else {
// Базовый случай
if (a == b) {
return Integer.toString(a);
}
// Шаг рекурсии / рекурсивное условие
return a + " " + recursion(a + 1, b);
}
}
public static void main(String[] args) {
System.out.println(recursion(20, 15)); // вызов рекурсивной функции
System.out.println(recursion(10, 15)); // вызов рекурсивной функции
}
}
3. Дано натуральное число N. Вычислите сумму его цифр.
При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется)
public class Solution {
public static int recursion(int n) {
// Базовый случай
if (n < 10) {
return n;
}// Шаг рекурсии / рекурсивное условие
else {
return n % 10 + recursion(n / 10);
}
}
public static void main(String[] args) {
System.out.println(recursion(123)); // вызов рекурсивной функции
}
}
4. Дано натуральное число N. Выведите все его цифры по одной, в обратном порядке, разделяя их пробелами или новыми строками.
При решении этой задачи нельзя использовать строки, списки, массивы (ну и циклы, разумеется). Разрешена только рекурсия и целочисленная арифметика.
public class Solution {
public static int recursion(int n) {
// Базовый случай
if (n < 10) {
return n;
}// Шаг рекурсии / рекурсивное условие
else {
System.out.print(n % 10 + " ");
return recursion(n / 10);
}
}
public static void main(String[] args) {
System.out.println(recursion(123)); // вызов рекурсивной функции
}
}
5. Дано натуральное число N. Выведите слово YES, если число N является точной степенью двойки, или слово NO в противном случае.
Операцией возведения в степень пользоваться нельзя!
public class Solution {
public static int recursion(double n) {
// Базовый случай
if (n == 1) {
return 1;
} // Базовый случай
else if (n > 1 && n < 2) {
return 0;
} // Шаг рекурсии / рекурсивное условие
else {
return recursion(n / 2);
}
}
public static void main(String[] args) {
double n = 64;
// вызов рекурсивной функции
if (recursion(n) == 1) {
System.out.println("Yes");
} else {
System.out.println("No");
}
}
}