Практические вопросы для рекурсии | Комплект 3

Опубликовано: 21 Января, 2022

Объясните функциональные возможности рекурсивных функций ниже.

Question 1 

C++

void fun1(int n)
{
   int i = 0;  
   if (n > 1)
     fun1(n - 1);
   for (i = 0; i < n; i++)
     cout << " * ";
}
 
// This code is contributed by shubhamsingh10

C

void fun1(int n)
{
   int i = 0; 
   if (n > 1)
     fun1(n-1);
   for (i = 0; i < n; i++)
     printf(" * ");
}

Java

static void fun1(int n)
{
   int i = 0;  
   if (n > 1)
     fun1(n - 1);
   for (i = 0; i < n; i++)
     System.out.print(" * ");
}
  
// This code is contributed by shubhamsingh10

Python3

def  fun1(n):
    i = 0
    if (n > 1):
        fun1(n - 1)
    for i in range(n):
        print(" * ",end="")
 
# This code is contributed by shubhamsingh10

C#

static void fun1(int n)
{
    int i = 0;
    if (n > 1)
        fun1(n-1);
    for (i = 0; i < n; i++)
        Console.Write(" * ");
}
 
// This code is contributed by shubhamsingh10

Javascript

<script>
 
function fun1(n)
{
    let i = 0;  
     
    if (n > 1)
        fun1(n - 1);
     
    for(i = 0; i < n; i++)
        document.write(" * ");
}
 
// This code is contributed by gottumukkalabobby
 
</script>

Ответ: Общее количество напечатанных звездочек равно 1 + 2 +…. (n-2) + (n-1) + n, то есть n (n + 1) / 2.

Question 2

C++

#define LIMIT 1000
void fun2(int n)
{
  if (n <= 0)
     return;
  if (n > LIMIT)
    return;
  cout << n <<" ";
  fun2(2*n);
  cout << n <<" ";
}
 
// This code is contributed by shubhamsingh10

C

#define LIMIT 1000
void fun2(int n)
{
  if (n <= 0)
     return;
  if (n > LIMIT)
    return;
  printf("%d ", n);
  fun2(2*n);
  printf("%d ", n);
}  

Java

int LIMIT = 1000;
void fun2(int n)
{
    if (n <= 0) return;
    if (n > LIMIT) return;
 
    System.out.print(String.format("%d ", n));
    fun2(2 * n);
    System.out.print(String.format("%d ", n));
}

Python3

LIMIT = 1000
def fun2(n):
    if (n <= 0):
        return
    if (n > LIMIT):
        return
    print(n, end=" ")
    fun2(2 * n)
    print(n, end=" ")
 
# This code is contributed by shubhamsingh10

C#

int LIMIT = 1000
void fun2(int n)
{
    if (n <= 0)
        return;
    if (n > LIMIT)
        return;
    Console.Write(n+" ");
    fun2(2*n);
    Console.Write(n+" ");
}
 
// This code is contributed by Shubhamsingh10

Javascript

<script>
 
let LIMIT = 1000;
function fun2(n)
{
    if (n <= 0)
        return;
    if (n > LIMIT)
        return;
 
    document.write(n + " "));
    fun2(2 * n);
    document.write(n + " "));
}
 
// This code is contributed by gottumukkalabobby
 
</script>

Ответ: Для положительного n fun2 (n) печатает значения n, 2n, 4n, 8n… пока значение меньше LIMIT. После печати значений в порядке возрастания он снова печатает те же числа в обратном порядке. Например, fun2 (100) печатает 100, 200, 400, 800, 800, 400, 200, 100.
Если n отрицательно, функция возвращается немедленно.
Пожалуйста, напишите комментарии, если вы обнаружите, что какой-либо из ответов / кодов неверен, или вы хотите поделиться дополнительной информацией по темам, обсужденным выше.

Вниманию читателя! Не прекращайте учиться сейчас. Освойте все важные концепции DSA с помощью самостоятельного курса DSA по приемлемой для студентов цене и будьте готовы к работе в отрасли. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .

Если вы хотите посещать живые занятия с отраслевыми экспертами, пожалуйста, обращайтесь к Geeks Classes Live и Geeks Classes Live USA.