Lenguaje C: llamada de función anidada, acceso a la cadena, declaración y definición de funciones, recursividad de funciones.

Llamadas anidadas de funciones, acceso encadenado.

Las funciones se pueden llamar de forma anidada, pero no se pueden definir de forma anidada, es decir, las funciones no se pueden definir de nuevo dentro de una función. Pero dentro de una función puedes llamar a otras funciones.

Llamada anidada: Es llamar a otra función dentro de una función.

Acceso en cadena: utilice el valor de retorno de una función como parámetro de otra función.

La siguiente figura es un acceso en cadena, utilizando el valor de retorno de strlen como parámetro de printf.

//El valor de retorno de printf es el número de caracteres impresos (tenga en cuenta que agregar \n después de %d, espacios, etc. son todos caracteres), si ocurre un error, devuelve un número negativo

Declaración y definición de funciones

Declaración de función:

1. Dígale al compilador cómo se llama una función, cuáles son sus parámetros y cuál es su tipo de retorno. Pero si existe o no, la declaración de la función no puede decidir.

2. La declaración de la función generalmente aparece antes del uso de la función. Debe declararse antes de su uso.

3. La declaración de la función generalmente debe colocarse en el archivo de encabezado.

Por ejemplo

Si la definición de la función está detrás de la llamada, aparecerá una advertencia que indica que la función Añadir no está definida, como en la Figura 2. En este momento, puede declararla antes de la llamada a la función, como en la Figura 2. El nombre de el parámetro formal puede omitirse u omitirse, es decir, ayb en la Figura 2 pueden omitirse y escribirse como int Add(int,int);

 Definición de función: La definición de función se refiere a la realización específica de la función, explicando la función realización de la función.

 Nota: La declaración de la función generalmente no se usa y rara vez se usa en la práctica cuando se escribe código. Si solo hay una función, ¿no se puede definir directamente al frente? No es necesario declarar. En una empresa, generalmente se crea un módulo adicional: crear un Add.c y Add.h y combinar estos dos se denomina módulo adicional.

 Coloque la definición de la función en Add.c (archivo fuente 2) y coloque la declaración de la función en Add.h (archivo de encabezado). Cuando lo use, consulte directamente el archivo de encabezado #include "Add.h" para usarlo en el archivo fuente original.  

 Si no desea exponer el código de definición de la función, puede compilar Add.c en una biblioteca estática. Simplemente abra otro proyecto y cree dos archivos de Add.h y Add.c. Luego, haga clic en el nombre del proyecto, haga clic con el botón derecho en propiedades, tipo de configuración general-biblioteca estática.lib-generar solución. Luego, se generará un archivo Add.lib bajo la depuración de ese archivo de proyecto. Abrir el archivo Add.lib es información binaria que no se puede leer. En este momento, otros pueden usar los archivos Add.h y Add.lib, y otros pueden usar esta función agregando estos dos archivos al archivo del proyecto. Se puede realizar en este momento, se le expone la declaración pero no se le muestra la implementación de la función. Es muy similar a las funciones de biblioteca. 

 Función de recursividad (recursión y regresión)

Una técnica de programación en la que un programa se llama a sí mismo se llama recursividad.

La recursividad como algoritmo es ampliamente utilizada en lenguajes de programación. Un proceso o función tiene un método para llamarse a sí mismo directa o indirectamente en su definición o descripción. Por lo general, transforma un gran problema complejo capa por capa en un problema más pequeño similar a la función original para resolver . Estrategia recursiva, solo necesita una pequeña cantidad de programas para describir los múltiples cálculos repetidos necesarios en el proceso de resolución de problemas, lo que reduce en gran medida la cantidad de código en el programa.

La forma principal de pensar es: hacer pequeñas las cosas grandes.

Cada recursión es una llamada de función completamente independiente.

Tome la recursividad más simple:

 Aunque esto es un error (desbordamiento de pila), de hecho es una recursión de una función.

Ejemplo: Acepte un valor entero e imprima cada bit en orden. Entrada 1234, salida 1 2 3 4 Esta es la recursión de la función print(). n>9 es la condición para el salto recursivo, de lo contrario habrá recursión inalámbrica y no será posible regresar

Dos condiciones necesarias para la recursividad (si no hay código recursivo, debe estar mal)

Hay restricciones, y cuando se cumple esta restricción, la recursividad ya no continuará.

Se acerca más y más a este límite después de cada llamada recursiva.

Ejemplo:

1. Escribe una función que permita la creación de variables temporales para encontrar la longitud de una cadena.

 2. No está permitido crear una variable temporal al escribir una función para encontrar la longitud de la cadena.

 


Recursión e iteración

La recursión a veces se puede escribir como iteración, y la iteración a veces se puede escribir como recursión.

1. Encuentra el factorial de n.

 2. Encuentra el n-ésimo número de Fibonacci. (no se considera desbordamiento)

Sucesión de Fibonacci: La suma de los dos primeros números es igual al tercer número. mentira (n) = mentira (n-1) + mentira (n-2)

 Es obvio que el segundo tipo de no recursivo es más eficiente. Menos operaciones y operaciones más rápidas.

Al escribir la recursividad, no hay ningún defecto evidente. Usamos la recursividad para completarla en este momento, de lo contrario, debe completarse con la no recursividad.

 pista:

Muchos problemas se explican en forma recursiva, simplemente porque es más claro que una forma no recursiva.

Sin embargo, la implementación iterativa de estos problemas suele ser más eficiente que la implementación recursiva, aunque la legibilidad del código empeora.

Cuando un problema complejo no se puede implementar por iteración, la simplicidad de la implementación recursiva puede compensar la sobrecarga de ejecución que conlleva.

Ejemplo clásico de recursividad de funciones:

1. Problema de la Torre de Hanoi.

2. La rana salta las escaleras. Supongamos que hay n pasos y una rana salta uno o dos pasos a la vez, ¿cuántas posibilidades hay en total?

Supongo que te gusta

Origin blog.csdn.net/zxf123567/article/details/123435031
Recomendado
Clasificación