【C语言】函数的嵌套|函数的递归|递归是什么?

举报
謓泽 发表于 2023/09/28 16:59:45 2023/09/28
【摘要】 【C语言】函数的嵌套|函数的递归|递归是什么?

📢📢递归两个必要条件 

每一个递归函数都应该只进行有限次的递归调用,否则它就会进入死胡同,永远也不能退出了,这样的程序是没有意义的。

  • 存在限制条件,当满足这个限制条件之后的时候,递归便会不再继续。
  • 每次递归调用之后都会越来越接近这个限制条件
  • 这两个条件是必须要知道的,这样你才知道递归怎么去使用。

那么下面举出一个最简单的例子,示例代码如下↓ 

#include<stdio.h>
int main(void)
{
	printf("hello C!\n");
	main();
	return 0;
}

C语言的递归是什么?不就是函数体内自身调用自己称之为递归吗。

如上述代码中可以看到,这里主函数里面有个打印库函数,其语句hello C。那么后面有个main();函数。那么当我们执行完语句,执行main();函数,此时执行由回到主函数开头又执行打印库函数,再执行main();函数进行调用。这样就构成了一个死循环,直到系统自己退出中这个死循环为止。不然就会一直存在这个死递归

  • 注意:递归不能这样写,但是它确实是递归。
  • 上面情况,如果你调试了,它会出现栈溢出的情况。

📢📢函数的嵌套 

  • 函数不能嵌套定义,但可以嵌套调用,也就是在一个函数的定义或调用过程中允许出现对另外一个函数的调用。
  • 在C语言中,函数的定义都是相互平行的,独立的。也就是说,在定义函数的时候,一个函数体内不能包含另一个函数的定义,这个有些语言是不同的。因为,有些语言是允许在定义函数的时候,在其中函数体包含另一个函数的形式,而这种形式称之为函数的嵌套。

例如:示例代码如下↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
int main(void)
{
	void Display()	//错误不能在函数内定义函数
	{
		printf("Hello C!\n");
	}
	return 0;
}

从上面的代码中可以看到,在主函数 main 中定义了一个 Display 函数,目的是输出语句(Hello C!)。但是,C语言是不允许进行嵌套定义的。因此就会提示错误!❌


虽然,C语言不允许嵌套定义,但是可以嵌套调用函数,也就是说,在一个函数体内可以调用另外一个函数。例如:下面代码进行函数的嵌套调用↓

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
void nesting()
{
	printf("hello C!\n");
}
void Display()	
{
	nesting();
}
int main(void)
{
	Display();
	return 0;
}

上述代码是正确的,在函数体内进行函数的嵌套调用形式

🖊运行结果↓

hello C

📢📢📢函数的递归

概述:一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层,当最内层的函数执行完毕后,再一层一层地由里到外退出。

📢📢递归是什么?

程序调用自身的编程技巧称为递归。递归作为一种算法在程序设计语言中是广泛应用的。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题转换位一个与原问题相似的规模较小的问题来去进行求解,递归策略只需少了的程序就可以描述出解题的过程所需要的多次重复计算,大大减少了程序的代码量。递归的人主要思考方式就在于:把大事化小。递归之所以能够实现,是因为函数的每个执行过程在栈中都有自己的形参和局部变量的副本,这些副本和和该函数的其它执行过程是不会发生关系的。

注意→当递归进入到最内层的时候,递归就结束了,就开始逐层退出了,也就是逐层执行 return 语句。当执行最后层的 return 之后,就执行上面一层的递归!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。