3

【C语言】函数的嵌套、函数的递归、递归是什么?递归两个必要条件。

 1 year ago
source link: https://blog.51cto.com/u_15814021/5906855
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

🚩write in front🚩   

🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎

🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家博主 & 星级博主~掘金⇿InfoQ~51CTO创作者[新人创作榜No.11]~周榜393﹣总榜1024⇿全网访问量40w+🏅

🆔本文由 謓泽 原创 发布在51CTOP 如需转载还请通知⚠

📝个人主页-​ ​謓泽51Ctop的博客​​📃

🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝

📣系列专栏-​ ​謓泽51Ctop的分类_51CTO博客​​🎓

✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本📩

【C语言】函数的嵌套、函数的递归、递归是什么?递归两个必要条件。_函数体

 📢📢函数的嵌套 

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

例如:示例代码如下↓

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

【C语言】函数的嵌套、函数的递归、递归是什么?递归两个必要条件。_嵌套_02

从上面的代码中可以看到,在主函数 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;
}

【C语言】函数的嵌套、函数的递归、递归是什么?递归两个必要条件。_嵌套_03

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

🖊运行结果↓

hello C


📢📢📢函数的递归

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

📢📢递归是什么?

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

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


📢📢递归两个必要条件 

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

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

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

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

【C语言】函数的嵌套、函数的递归、递归是什么?递归两个必要条件。_递归_04

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

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

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

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK