C语言递归的奥秘,你真的彻底参透了吗?

2026-04-19 03:231阅读0评论SEO资讯
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1812个文字,预计阅读时间需要8分钟。

C语言递归的奥秘,你真的彻底参透了吗?

什么是递归?要说到递归,如果不提栈的话,我觉得有点不合适。递归特点就是不断的调用同一函数,如果这个函数没有递归界限,那么就会陷入死循环。因此,讨论递归,就必须讨论递归界限。

什么是递归?

要说到递归如果不说栈的话,我觉得有点不合适,递归特点就是不断的调用同一个函数,如果这个函数没有一个递归界限,那么就是死循环了,所以讨论递归,就必须要讨论递归的界限,就是限定这个递归调用多少次。

我们看一个例子

#include "stdio.h" int digui(unsigned long count ) { if(count > 0){ count --; printf("%d \n",count); digui(count); } return 1; } int main() { digui(10); return (100); }

这个递归函数的限定判读是

if(count > 0){

所以他的调用顺序可以用这个图示来说明

这个过程叫做递去,也就是压栈的过程,既然有压栈的过程,那么就有出栈的过程,出栈的过程就是

if(count > 0){

判断不成功后,就会出栈了。如下图所示

一共能执行多少次递归?

我们上面说到了,既然递归使用了栈,那么系统的栈的大小肯定是有极限的,不可能系统给你分配无极限的栈的大小,我看一些文章说栈大小是64K。

还是上面那个例子,我把传入数据设置为很大执行看看。

阅读全文

本文共计1812个文字,预计阅读时间需要8分钟。

C语言递归的奥秘,你真的彻底参透了吗?

什么是递归?要说到递归,如果不提栈的话,我觉得有点不合适。递归特点就是不断的调用同一函数,如果这个函数没有递归界限,那么就会陷入死循环。因此,讨论递归,就必须讨论递归界限。

什么是递归?

要说到递归如果不说栈的话,我觉得有点不合适,递归特点就是不断的调用同一个函数,如果这个函数没有一个递归界限,那么就是死循环了,所以讨论递归,就必须要讨论递归的界限,就是限定这个递归调用多少次。

我们看一个例子

#include "stdio.h" int digui(unsigned long count ) { if(count > 0){ count --; printf("%d \n",count); digui(count); } return 1; } int main() { digui(10); return (100); }

这个递归函数的限定判读是

if(count > 0){

所以他的调用顺序可以用这个图示来说明

这个过程叫做递去,也就是压栈的过程,既然有压栈的过程,那么就有出栈的过程,出栈的过程就是

if(count > 0){

判断不成功后,就会出栈了。如下图所示

一共能执行多少次递归?

我们上面说到了,既然递归使用了栈,那么系统的栈的大小肯定是有极限的,不可能系统给你分配无极限的栈的大小,我看一些文章说栈大小是64K。

还是上面那个例子,我把传入数据设置为很大执行看看。

阅读全文