Pregunta 1
Considere la siguiente función C recursiva. Sea len la longitud de la string s y num el número de caracteres impresos en la pantalla. Dé la relación entre num y len donde len siempre es mayor que 0.
C++
void abc(char *s) { if(s[0] == '\0') return; abc(s + 1); abc(s + 1); cout << s[0]; } // This code is contributed by shubhamsingh10
C
void abc(char *s) { if(s[0] == '\0') return; abc(s + 1); abc(s + 1); printf("%c", s[0]); }
Java
static void abc(char *s) { if(s[0] == '\0') return; abc(s + 1); abc(s + 1); System.out.print(s[0]); } // This code is contributed by shubhamsingh10
Python3
def abc(s): if(len(s) == 0): return abc(s[1:]) abc(s[1:]) print(s[0]) # This code is contributed by shubhamsingh10
C#
static void abc(char *s) { if(s[0] == '\0') return; abc(s + 1); abc(s + 1); Console.Write(s[0]); } // This code is contributed by shubhamsingh10
Javascript
<script> //Javascript Implementation function abc(s) { if(s.length == 0) return; abc(s.substring(1)); abc(s.substring(1)); document.write(s[0]); } // This code is contributed by shubhamsingh10 </script>
Complejidad del tiempo: O(2 n )
Espacio Auxiliar: O(n)
La siguiente es la relación entre num y len .
num = 2^len-1
s[0] is 1 time printed s[1] is 2 times printed s[2] is 4 times printed s[i] is printed 2^i times s[strlen(s)-1] is printed 2^(strlen(s)-1) times total = 1+2+....+2^(strlen(s)-1) = (2^strlen(s)) - 1
Por ejemplo, el siguiente programa imprime 7 caracteres.
C++
#include <bits/stdc++.h> using namespace std; void abc(char s[]) { if(s[0] == '\0') return; abc(s + 1); abc(s + 1); cout << s[0]; } int main() { abc("xyz"); return 0; } //This code is contributed by shubhamsingh10
C
#include<stdio.h> void abc(char *s) { if(s[0] == '\0') return; abc(s + 1); abc(s + 1); printf("%c", s[0]); } int main() { abc("xyz"); return 0; }
Java
public class GFG { static void abc(String s) { if(s.length() == 0) return; abc(s.substring(1)); abc(s.substring(1)); System.out.print(s.charAt(0)); } public static void main(String[] args) { abc("xyz"); } } // This code is contributed by divyeh072019
Python3
def abc(s): if(len(s) == 0): return abc(s[1:]) abc(s[1:]) print(s[0],end="") # Driver code abc("xyz") # This code is contributed by shubhamsingh10
C#
using System; class GFG { static void abc(string s) { if(s.Length == 0) return; abc(s.Substring(1)); abc(s.Substring(1)); Console.Write(s[0]); } // Driver code static void Main() { abc("xyz"); } } // This code is contributed by divyeshrabadiya07
Javascript
<script> // Javascript implementation function abc(s) { if(s.length == 0) return; abc(s.substring(1)); abc(s.substring(1)); document.write(s[0]); } abc("xyz"); //This code is contributed by shubhamsingh10 </script>
Gracias a bharat nag por sugerir esta solución.
Pregunta 2
C++
#include <iostream> using namespace std; int fun(int count) { cout << count << endl; if(count < 3) { fun(fun(fun(++count))); } return count; } int main() { fun(1); return 0; } // This code is contributed by Shubhamsingh10
C
#include<stdio.h> int fun(int count) { printf("%d\n", count); if(count < 3) { fun(fun(fun(++count))); } return count; } int main() { fun(1); return 0; }
Java
import java.util.*; class GFG{ static int fun(int count) { System.out.println(count); if(count < 3) { fun(fun(fun(++count))); } return count; } public static void main(String[] args) { fun(1); } } // This code is contributed by Shubhamsingh10
Python3
def fun(count): print(count) if(count < 3): count+=1 fun(fun(fun(count))) return count if __name__=="__main__": fun(1) # This code is contributed by Shubhamsingh10
C#
using System; class GFG{ static int fun(int count) { Console.Write(count+"\n"); if(count < 3) { fun(fun(fun(++count))); } return count; } static public void Main () { fun(1); } } // This code is contributed by shubhamsingh10
Javascript
<script> function fun(count) { document.write(count + "</br>"); if(count < 3) { fun(fun(fun(++count))); } return count; } fun(1); </script>
Producción:
1 2 3 3 3 3 3
La función main() llama a fun(1). fun(1) imprime “1” y llama a fun(fun(fun(2))). fun(2) imprime “2” y llama a fun(fun(fun(3))). Entonces, la secuencia de llamadas a la función se convierte en fun(fun(fun(fun(fun(3))))). fun(3) imprime «3» y devuelve 3 (tenga en cuenta que la cuenta no se incrementa y no se llaman más funciones como si la condición no fuera cierta para la cuenta 3). Entonces, la secuencia de llamada de función se reduce a fun(fun(fun(fun(3)))). fun(3) vuelve a imprimir «3» y devuelve 3. Así que la llamada a la función se reduce de nuevo a fun(fun(fun(3))) que vuelve a imprimir «3» y lo reduce a fun(fun(3)). Esto continúa y obtenemos “3” impreso 5 veces en la pantalla.
Complejidad del tiempo: O(2 n )
Espacio Auxiliar : O(n)
Escriba comentarios si encuentra que alguna de las respuestas/códigos es incorrecta, o si desea compartir más información/preguntas sobre los temas discutidos anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA