La programación debe explicar cada paso.
Llamada a función anidada: llamar a otras funciones en la función llamada se llama llamada a función anidada.
◆ El lenguaje C no puede definir funciones de forma ordenada.
Por ejemplo, la función f2 se llama en la siguiente llamada a la función f1.
flotante f1(int a, int b)
{
f2(a b, a-b);
…
}
int f2(int x, int y)
{
…
}
El proceso de llamada se muestra en la Figura 7.2.
El ejemplo 7.10 encuentra los valores de 1k 2k 3k...nk, suponiendo que k es 4 y n es 6.
#Contiene "stdio.h"
void main()
{
int suma, n=6, k = 4 ;
sum=add(k,n);
Printf("Resultado de salida: d ",sum);
}
Add(int a, int b) /*Función: add */
{
int i, s = 0;
for(I = 1 ;ilt= b;i)
s = s potencia (I, a);
Orden de devolución;
}
Potencias (int m, int n) /*Función: Multiplicación*/
{
int j, p = 1;
for(j = 1; j lt= n; j )
p = p * m;
Return (p);
}
Los resultados de la ejecución son de la siguiente manera:
2275
Llamada de función recursiva
Llamada recursiva: llamar directa o indirectamente a la función misma durante el proceso de llamar a una función se denomina llamada recursiva de la función.
Al escribir un programa de llamada recursiva, preste atención a:
(1) Algoritmo del programa recursivo: cómo implementar su recursividad
(2) Condiciones finales; de llamadas recursivas: Evite llamadas recursivas interminables que causen bucles infinitos. Por lo tanto, la llamada recursiva debe ser una llamada recursiva condicional:
Si (condición) llamada recursiva
De lo contrario...
Ejemplo 7.11 La programación utiliza un algoritmo recursivo para encontrar ¡norte! proceso factorial.
Matemáticamente podemos saber: n! = 1 * 2 * 3 * ...* n, podemos obtener:
La condición final de la llamada recursiva:
if( (n==0)|| ( n= =1)) devuelve (1);
de lo contrario devuelve (n * fac(n-1)); /* fac(n-1) encontrado (n-1)! Función*/
El proceso es el siguiente:
Factor entero (entero n)
{
Si (n lt0)printf (" n lt; 0, error de entrada de datos! ”);
else if( (n==0)|| (n==1)) devuelve (1);
else return(n * fac(n-1));
}
void main()
{
int n , y ;
Printf("Ingrese un número entero: ");
scanf("d ", ampn
y = fac(n) ;
printf("d!=d ",n,y);
}
Los resultados de la operación son los siguientes:
Ingrese un número entero: 5↙.
5!=120
El ejemplo 7.12 llama a una función recursiva para cambiar el orden inferior de un número entero a un orden superior, y el orden superior en un orden inferior para formar otro número entero. Por ejemplo, ingresar 1234 da como resultado otro número entero 4321.
#Contiene "stdio.h"
int fun(int n, int m)
{
if (n== 0) Devuelve m;
else devuelve diversión(n/10, m * 10 n 10
}
void main()
;{
printf("d\n ", divertido(1234, 0));
}