C语言的函数嵌套调用与函数递归调用有啥区别?

看谭浩强的第三版看了半天没看明白这两个调用有啥区别,(顺带一提,谭老师的英语貌似不太好……),看到网友说递归是嵌套的一种,是吗?
具体区别到底是什么?

需要明白的是

函数嵌套是语言特性,递归调用是逻辑思想。

函数嵌套允许在一个函数中调用另外一个函数,比如有三个函数

funca()
{
funcb();
}

funcb()
{
funcc();
}

funcc()
{
cout << "Hello" <<endl;
}

这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。

而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。

递归最明显的特点就是,自己调用自己(不就嵌套调用了嘛)。
funca()
{
if(statement1)
funca();
else
exit(0);
}

概括说,函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。

我说的不知道明不明白,有点乱……
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-09-07
函数嵌套是语言特性,递归调用是逻辑思想。
1
函数嵌套
函数嵌套允许在一个函数中调用另外一个函数,比如有三个函数
例:
funca()
{
funcb();
}
funcb()
{
funcc();
}
funcc()
{
cout
<<
"Hello"
<<endl;
}
这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。
2
递归调用
而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。
递归最明显的特点就是,自己调用自己。
例:
funca()
{
if(statement1)
funca();
else
exit(0);
}
概括说,函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。
嵌套调用就是某个函数调用另外一个函数,递归调用是一个函数直接或间接的调用自己。举几个例子:A调用B(嵌套)B调用C(嵌套)A调用A(递归)A调用B
B调用A
(递归)A调用B
B调用C
C调用A
(递归)
第2个回答  2020-03-31
需要明白的是
函数嵌套是语言特性,递归调用是逻辑思想。
函数嵌套允许在一个函数中调用另外一个函数,比如有三个函数
funca()
{
funcb();
}
funcb()
{
funcc();
}
funcc()
{
cout
<<
"Hello"
<<endl;
}
这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。
而递归是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个和尚要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。
递归最明显的特点就是,自己调用自己(不就嵌套调用了嘛)。
funca()
{
if(statement1)
funca();
else
exit(0);
}
概括说,函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。
我说的不知道明不明白,有点乱……
第3个回答  2007-07-31
递归调用 就是函数里出现自己调用自己,直接或曲折迂回调用到自己。

嵌套调用就是不同子程序之间相互调用,无论如何曲折迂回,也不出现自己调用自己的情况。
第4个回答  2020-02-10
嵌套调用这个名词是没有任何意义的,看到那本书上有这个名词赶紧扔掉吧!
递归是函数(或过程其他语言)直接或间接调用自已的做法!例如
1)直接递归调用
int
f(int
n){if(n==0)return
1;/*必须有这样的一步*/
return
n*f(n-1);/*当然象这样简单计算不需要用递归!*/
}
2)问接调用
double
g(double
x,int
n);
doube
f(double
x,int
n){if(x<=0&&n<=0)retun
0;
if(n==0)return
0;if(n==1)return
x;
if(n<0)return
f(1/x);
if(n&1)return
x*g(x,n/2);
return
g(x,n/2);
}
double
g(double
x,n){return
f(x*x,n);}
相似回答