说一说递归里的return返回!!!

说一说递归里的return返回!!!

今天看二叉树时候遇到递归,结果半天没想起来递归是啥(实在是平时几乎没有用到递归),想了想既然用到了就总结一下吧!

有return的递归

有return的递归我参考了网上一个大佬的博客。 有这样一个程序:

#include

int cheng(int a)

{

if(a>1)

{

a=a*cheng(a-1);

printf("%d\n",a);

}

return a;

}

int main()

{

int b=5,c;

c=cheng(b);

printf("%d",c);

}

可以看到实现累乘5x4x3x2x1,但是计算机是这样执行的。

1*2

2*3

6*4

24*5

并不是从5*4开始的 再看一下递归函数:

int cheng(int a)

{

if(a>1)

{

a=a*cheng(a-1);

printf("%d\n",a);

}

return a;

}

从输出可以看出累乘是从1(a-1=1,此时a是2)开始的,1不能满足if判断,直接return,注意这里面不是return结束,而是返回给上一层,上一层是不是就是2(此时a是3)。但是2是满足if判断的所以是不是就是:

a=2*cheng(2); 此时a不就是2嘛

然后往上层,进入if判断,

a=3*2

就这样一层一层往上层走。 总结一句话:

有return的递归要特别注意,是从最内层开始一层一层往外层走的。

验证:我给上面程序return a;这句改称return 10;看一下会发生什么? 最内层原本要返回1的,我强制让他返回10,所以就是2x10; 再次返回因该返回20,但是强制只能返回10,所以是3x10; 这部分参考那个大佬的博客是: https://blog.csdn.net/IT8343/article/details/80180448 下面我们看一下无return的递归:

无return返回值的递归

#include "stdio.h"

void fun(int x)

{

x++;

printf("%d \n",x);

if(x==10)

{

return;//这里return不是返回没有返回任何数,只是做结束,结束程序。不然跑飞了

}

fun(x);

}

int main()

{

fun(0);

return 0;

}

看一下运行结果: 这里就不是最内层的一层层往上层返回了。就单纯的函数里面调用函数。如果我们在调用后面再加一句语句呢?

#include "stdio.h"

int i=0;

void fun(int x)

{

x++;

printf("%d \n",x);

if(x==10)

{

return;//这里return不是返回没有返回任何数,只是做结束,结束程序。不然跑飞了

}

fun(x);

printf("i= %d\n",i++);

}

int main()

{

fun(0);

return 0;

}

这就需要注意函数的完整性问题了! –END–

言语表达有限,讲的不好请谅解。如有错误感谢指正。 thanks!!!

相关推荐

滴滴拼车的优缺点分析及用户体验分享
365bet提款到账时间

滴滴拼车的优缺点分析及用户体验分享

📅 07-05 👁️ 6922
【世南美预】阿根廷vs巴西首发阵容名单(2025年03月26日)
365提款会被冻结卡吗

【世南美预】阿根廷vs巴西首发阵容名单(2025年03月26日)

📅 07-07 👁️ 8431
醋甲唑胺,554
365提款会被冻结卡吗

醋甲唑胺,554

📅 07-07 👁️ 3525