谁能帮我分别举一个例子,是关于函数的嵌套调用和递归调用的(要每一步都详细解说一下,非常感谢!}

我对C函数完全搞不懂。。小弟在这谢谢各位老师了。。。。。

第1个回答  2010-07-28
7.5.1 函数嵌套调用
函数嵌套调用:在被调函数中再调用其它函数称函数嵌套调用。
◆ C语言不能嵌套定义函数。
例如:在下列调用f1函数中调用f2函数。
float f1(int a, int b)

{



f2(a+b,a-b);



}

int f2(int x, int y)

{



}

调用过程如图7.2所示。

【例7.10】求1k+2k+3k+…+nk的值,假设k为4,n为6。

#include "stdio.h"

void main( )

{

int sum, n=6, k=4;

sum=add(k, n);

printf("输出结果为:%d",sum );

}

add(int a,int b) /*该函数功能:进行累加*/

{

int i, s=0;

for(i=1; i<=b; i++)

s=s+powers(i,a);

return(s);

}

powers(int m, int n) /*该函数功能:进行累乘*/

{

int j, p=1;

for (j=1; j<=n; j++)

p=p*m;

return(p);

}

运行结果为:

2275

7.5.2 函数递归调用
递归调用:在调用一个函数的过程中直接或间接地调用该函数本身,称为函数的递归调用。

在编写递归调用程序时注意:

(1)递归程序算法:即如何实现其递归;

(2)递归调用的结束条件:避免无止境递归调用造成死循环。所以递归调用应为条件递归调用:

if (条件) 递归调用

else ……

【例7.11】用递归算法编程求n!阶乘的程序。

从数学可知:n!=1*2*3* … *n,可得:

递归调用的结束条件:

if( (n==0)|| (n==1)) return(1);

else return(n*fac(n-1)); /* fac(n-1)求(n-1)!函数*/

程序如下:

int fac(int n)

{

if (n<0) printf("n<0,输入数据错误!");

else if( (n==0)|| (n==1)) return(1);

else return(n*fac(n-1));

}

void main( )

{

int n, y;

printf("请输入一个整数:");

scanf("%d",&n);

y=fac(n);

printf("%d!=%d",n, y);

}

运行结果为:

请输入一个整数:5↙

5!=120

【例7.12】调用一个递归函数,将一个整数的低位变成高位,高位变成低位组成另一个整数,例如输入1234得到另一个整数4321。

#include "stdio.h"

int fun(int n, int m)

{

if (n==0) return m;

else return fun(n/10, m*10+n%10);

}

void main( )

{

printf("%d\n",fun(1234, 0));

}
第2个回答  2010-07-30
利用递归将字符串倒置
void recur(char *c,int k){ //k为字符串长度
char tmp;
if(k>1){ //递归退出条件
recur(c+1,k-2);// 递归到字符串中间位置 然后再向外展开进行交换
tmp=c[0];
c[0]=c[k-1];
c[k-1]=tmp;
}
}
第3个回答  2010-07-28
谭浩强的书上写的很详细,沉下心去读3遍。本回答被提问者采纳
第4个回答  2010-07-28
可以这样来理解,嵌套调用是a调用b,而递归是a调用a,即本身。
既然对c函数搞不懂,就先把c学好。