Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
U: Разворот числа
public class Solution {
public static int recursion(int n, int i) {
return (n==0) ? i : recursion( n/10, i*10 + n%10 );
}
public static void main(String[] args) {
System.out.println(recursion(158, 0));
}
}
def rev(num,tmp):
res = tmp*10 + num%10
if num > 10:
res = rev(num/10, res)
return res
print rev(123456789,0)
if (n % 2 == 1) {
System.out.println(n);
}
recursion();
def ispow2(num):
if num == 1:
return True
if num % 2 == 1:
return False
return ispow2(num/2)
print ispow2(1024)
// Шаг рекурсии / рекурсивное условие
if (n % 2 == 1) {
System.out.println(n);
recursion();
} else {
recursion();
}
// Шаг рекурсии / рекурсивное условие
if (n % 2 == 1) {
System.out.println(n);
}
recursion();
# Recursive version
def findrec(target, length):
res = 0
if length == 1 and target < 10:
res = 1
elif length > 1:
for i in range(min(10,target)):
res += findrec(target-i, length-1)
return res
# Memorization version
def findmem(target, length, mem):
if mem[target][length] > -1:
return mem[target][length]
res = 0
if length == 1 and target < 10:
res = 1
elif length > 1:
for i in range(min(10,target)):
r = findmem(target-i, length-1, mem)
mem[target-i][length-1] = r
res += r
return res
def find(target, length):
mem = [[-1]*(length+1) for _ in range(target+1)]
return findmem(target, length, mem)
Алгоритм за логарифмическое время не пришел в голову.
склеивать числа в строку крайне неэффективно, почему бы их прямо из функции не печатать?
public static String reverseRecursively(String str) {
//base case to handle one char string and empty string
if (str.length() < 2) {
return str;
}
return reverseRecursively(str.substring(1)) + str.charAt(0);
}
D: Точная степень двойки
def foo(n):
if n & (n - 1) == 0:
print('YES')
print('NO')
def foo(n):
if n & (n - 1) == 0:
print('YES')
else:
print('NO')
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);
}
} if (a > b) {
// Базовый случай
if (a == b) {public static String recursion(int a, int b) {
if (a == b) {
return Integer.toString(a);
}
return a > b
? a + " " + recursion(a - 1, b)
: a + " " + recursion(a + 1, b);
}
Рекурсия. Занимательные задачки