C语言中,所有的执行语句都只能出现在函数之中。同样,函数的调用也只能出现在某函数的函数体内。函数的调用以两种方式出现:函数的嵌套与函数的递归。 C语言中,所有函数的定义都是互相平行和独立的,一个函数的定义不能包含另一个函数的定义,即不允许函数的嵌套定义。但函数的调用可以通过用一个函数另一个函数来实现,这就形成了函数的嵌套定义!C语言不限制嵌套的个数和层数,这样我们就可以自由,合理的组织程序的模块结构
程序调用自身的编程技巧称为递归( recursion)。
一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口
1fibonacci数列问题
#include<stdio.h>
static long fibonacci(int n) //内部函数
{
if(n==1||n==2)
return 1;
else
{
return fibonacci(n-2)+fibonacci(n-1);
}
}
void main()
{
int n,i;
printf("Input n.");
scanf("%d",&n);
for(i=1;i<=n;++i)/*列出每一项的值*/
{
printf("%ld",fibonacci(i));
}
}
#include<stdio.h>
int age(int n)
{
int c;
if(n==1||n==2)
c=1;
else
c=age(n-1)+age(n-2);
return c;
}
void main()
{
printf("%d\n",age(5));
}
#include<stdio.h>
void main()
{
float fac(int);
int n;
float y;
printf("Input an integer number:\n");
scanf("%d",&n);
y=fac(n);
printf("%d!=%10.0f\n",n,y);
}
float fac(int n)
{
float f;
if(n<0)
{
printf("n<0 data error!");
}
else
if(n==0||n==1)
f=1;
else f=fac(n-1)*n;
return f;
}
//在调用一个函数的过程中又出现直接或间接的调用该函数本身
#include<stdio.h>
int age(int n)
{
int c;
if(n==1)
c=10;
else
c=age(n-1)+2;
return c;
}
void main()
{
printf("%d\n",age(5));
}