什么是函数嵌套和递归

解释一:
函数的嵌套调用是在函数调用中再调用其它函数,函数的递归调用是在函数调用中再调用该函数自身。
解释二:
函数嵌套是语言特性,递归调用是逻辑思想。

函数嵌套允许在一个函数中调用另外一个函数,比如有三个函数:
func1()
{
  func2();
}
func2()
{
  func3();
}
  func3()
{
  printf("Hello");
}
这个就叫做嵌套调用,它是一个语言提供的程序设计的方法,也就是语言的特性。
而递归,是一种解决方案,一种思想,将一个大工作分为逐渐减小的小工作,比如说一个人要搬50块石头,他想,只要先搬走49块,那剩下的一块就能搬完了,然后考虑那49块,只要先搬走48块,那剩下的一块就能搬完了……以此类推的思考,递归是一种思想,只不过在程序中,就是依靠函数嵌套这个特性来实现了。
递归最明显的特点就是,自己调用自己(就是函数嵌套调用)。如下例
funca()
{
  if(statement1)
  funca();
  else
  exit(0);
}
概括说,函数嵌套就是函数调用函数,是普遍的,递归就是函数调用自身,使函数嵌套的一个特例。

递归的作用:
递归做为一种算法在程序设计语言中广泛应用.是指函数/过程/子程序在运行过程序中直接或间接调用自身而产生的重入现象.
递归是一个函数在其定义中又直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。用递归思想写出的程序往往十分简洁易懂。
  一般来说,递归需要有边界条件、递归前进段和递归返回段。当边界条件不满足时,递归前进;当边界条件满足时,递归返回。
注意:
(1) 递归就是在过程或函数里调用自身;
(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。
递归算法一般用于解决三类问题:
(1)数据的定义是按递归定义的。(Fibonacci函数)
(2)问题解法按递归算法实现。(回溯)
(3)数据的结构形式是按递归定义的。(树的遍历,图的搜索)

函数嵌套指在一个函数调用另一个函数,而递归则是指函数调用自身的过程。 在C语言中,函数嵌套可以让程序更加模块化,便于维护阅读,也可以提高程序的可重用性。例如,一个函数中需要调用另一个函数来完成某个功能,可以将这个函数嵌套在主函数中。 函数嵌套的语法很简单,例如: ```c void func1() { printf("This is function 1\n"); } void func2() { printf("This is function 2\n"); func1(); } int main() { func2(); return 0; } ``` 在上面的例子中,func2()函数调用了func1()函数递归则是指一个函数调用自身的过程。递归函数必须包含一个停止条件,否则将会出现无限递归导致程序崩溃。递归函数可以用于解决一些问题,例如计算阶乘、斐波那契数列等。 下面是一个计算阶乘的递归函数的示例: ```c int factorial(int n) { if (n == 0) { return 1; } else { return n * factorial(n - 1); } } int main() { int result = factorial(5); printf("%d", result); return 0; } ``` 在上面的例子中,factorial()函数调用自身来计算阶乘。当n等于0时,递归停止,函数返回1。否则,函数计算n的阶乘并返回结果。 需要注意的是,递归函数的效率有时候并不高,因为每次调用函数都需要将函数的参数返回地址等信息压入栈中,消耗了一定的时间内存。因此,在使用递归函数时,应该尽量避免出现无限递归的情况,以及递归次数过多导致栈溢出等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值