进度日志20 (嵌套调用、递归法)
学习笔记1:函数的嵌套调用
编程:
#include <stdio.h>
long square(int p); //实现平方
long factorial(int q); //实现阶乘
//C语言不能嵌套定义,所以统一在外面声明
void main()
{
int i;
long s = 0;
/*for (i = 2; i <= 3; i++)
{
s = s + square(i);
}*/
s = square(2) + square(3);
printf("%1d\n", s);
}
long square(int p)
{
int k;
long r;
long factorial(int);
k = p * p;
r = factorial(k);
return r;
}
long factorial(int q)
{
long c = 1;
int i;
for (i = 1; i <= q; i++)
{
c *= i;
}
return c;
}
学习笔记2:递归调用
在调用一个函数的过程中又出现直接或间接地 调用该函数本身 【自己调戏自己】
例如:
int f (int x)
{
int y, z;
z = f(y);
return(2 * z);
}
在递归中必须要有一个退出的条件
#include <stdio.h>
long recursion(int n); //声明,告诉编译器有这个东西的存在
void main()
{
int n;
long result;
printf("intput a integer number:\n");
scanf("%d", &n);
result = recursion(n);
printf("%d!=%ld\n", n, result);
}
long recursion(int n) //定义,说明具体意义
{
long temp_result;
if (n < 0)
{
printf("n<0,input error!\n");
}
else if (n == 0 || n == 1)
{
temp_result = 1;
}
else
{
temp_result = recursion(n - 1)*n;
}
return temp_result;
}