user-0 提问: 【C语言求助】递归中不加return跟加return的区别？

回复:
user: user-1
content: C和C++完整教程:https://blog.csdn.net/it_xiangqiang/category_10581430.html C和C++算法完整教程:https://blog.csdn.net/it_xiangqiang/category_10768339.html

user: user-0
content: 引用 3 楼 自信男孩的回复:不加return，只要有退出函数的条件就行，防止函数一直递归下去，而无终止。  void trans(int n) {           if((n/10)!=0)         {            trans(n/10);//输入483，不加return输出483，加return输出4         }             putchar(n%10+'0'); } 这个其实也算是有退出条件的，即n/10 == 0；  所以如果要加return的话，可以这么加: #include <stdio.h> #include <stdlib.h>  void trans(int n) {     if (n/10 == 0) {         putchar(n%10+'0');         return;     }     if((n/10)!=0)     {         trans(n/10);//输入483，不加return输出483，加return输出4     }       putchar(n%10+'0'); }  int  main() {     printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d",&n);     if(n>0)     {          trans(n);     }     if(n<0)     {         putchar('-');          int abs_n=abs(n);         trans(abs_n);     }   } 供参考～  递归不一定非要return，但是一定要有递归终止的条件。 如果按你写的加return的话，输入483，只会输出4，所以我想知道是怎么执行的

user: user-0
content: 引用 3 楼 自信男孩的回复:不加return，只要有退出函数的条件就行，防止函数一直递归下去，而无终止。  void trans(int n) {           if((n/10)!=0)         {            trans(n/10);//输入483，不加return输出483，加return输出4         }             putchar(n%10+'0'); } 这个其实也算是有退出条件的，即n/10 == 0；  所以如果要加return的话，可以这么加: #include <stdio.h> #include <stdlib.h>  void trans(int n) {     if (n/10 == 0) {         putchar(n%10+'0');         return;     }     if((n/10)!=0)     {         trans(n/10);//输入483，不加return输出483，加return输出4     }       putchar(n%10+'0'); }  int  main() {     printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d",&n);     if(n>0)     {          trans(n);     }     if(n<0)     {         putchar('-');          int abs_n=abs(n);         trans(abs_n);     }   } 供参考～  递归不一定非要return，但是一定要有递归终止的条件。 这样是怎么执行的？

user: user-0
content: 引用 3 楼 自信男孩的回复:不加return，只要有退出函数的条件就行，防止函数一直递归下去，而无终止。  void trans(int n) {           if((n/10)!=0)         {            trans(n/10);//输入483，不加return输出483，加return输出4         }             putchar(n%10+'0'); } 这个其实也算是有退出条件的，即n/10 == 0；  所以如果要加return的话，可以这么加: #include <stdio.h> #include <stdlib.h>  void trans(int n) {     if (n/10 == 0) {         putchar(n%10+'0');         return;     }     if((n/10)!=0)     {         trans(n/10);//输入483，不加return输出483，加return输出4     }       putchar(n%10+'0'); }  int  main() {     printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d",&n);     if(n>0)     {          trans(n);     }     if(n<0)     {         putchar('-');          int abs_n=abs(n);         trans(abs_n);     }   } 供参考～  递归不一定非要return，但是一定要有递归终止的条件。 那如果是return加在trans(n)的前面呢？就是 return trans(n)；

user: user-2
content: 不加return，只要有退出函数的条件就行，防止函数一直递归下去，而无终止。  void trans(int n) {           if((n/10)!=0)         {            trans(n/10);//输入483，不加return输出483，加return输出4         }             putchar(n%10+'0'); } 这个其实也算是有退出条件的，即n/10 == 0；  所以如果要加return的话，可以这么加: #include <stdio.h> #include <stdlib.h>  void trans(int n) {     if (n/10 == 0) {         putchar(n%10+'0');         return;     }     if((n/10)!=0)     {         trans(n/10);//输入483，不加return输出483，加return输出4     }       putchar(n%10+'0'); }  int  main() {     printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d",&n);     if(n>0)     {          trans(n);     }     if(n<0)     {         putchar('-');          int abs_n=abs(n);         trans(abs_n);     }   } 供参考～  递归不一定非要return，但是一定要有递归终止的条件。

user: user-3
content: “给定一个小点的输入，完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门！ 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出

user: user-4
content: return 后，下面的语句就不执行了

user: user-5
content: 看了一下老哥，码龄21年，你是真的编程了20年吗

user: user-4
content: return 以后本次递归不执行，难道 不对吗？

user: user-5
content: 对啊  这不是语言机制吗 我平时很少遇到编程二十几年的人 ，所以好奇的问了一下，不是质疑你说的对不对的问题 ；

user: user-6
content: 有个问题，你这个功能实现在 vs2019 实现不了 整型 转字符串，  引用 楼主 飞禽走兽卍一2b 的回复:#include <stdio.h> #include <math.h> #include <stdlib.h> /*       函数目的：将输入的整数转换为字符型 */ void trans(int n) {          if((n/10)!=0)         {            trans(n/10);//输入483，不加return输出483，加return输出4         }           putchar(n%10+'0'); }  void main() {  printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d",&n);     if(n>0)     {      trans(n);     }     if(n<0)     {         putchar('-');          int abs_n=abs(n);         trans(abs_n);     }   }  请问这是怎么回事？最好能具体讲讲执行过程，谢谢！

user: user-6
content: 不好意思楼主，我在vs 2019测试了 ，不论 加不加return 返回的值 都是同一个， return的作用，函数是void 类型 可以省略，如果函数的 返回类型 是Int 或 其他类型 ，需要添加return 返回值 ，我认为可能编译器的问题吧，我的测试结果都一样。  测试： 输入 483 输出 483  #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <math.h> #include <stdlib.h> /*       函数目的：将输入的整数转换为字符型 */ void trans(int n) {      if ((n / 10) != 0)     {         trans(n / 10);//输入483，不加return输出483，加return输出4     }      putchar(n % 10 + '0');    // return; }  void main() {     printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d", &n);     if (n > 0)     {          trans(n);     }     if (n < 0)     {         putchar('-');          int abs_n = abs(n);         trans(abs_n);     }   }

user: user-4
content: void trans(int n) {         if((n/10)!=0)         {             return  trans(n/10);         }         putchar(n%10+'0'); } 首先你要理解递归。按照你的执行流程，trans （483）将调用 trns(48),再调用 trns(4) 进入到trans(4)，因为 上边的if不满足条件执行 putchar 打印4 退出了trans(4) 返回到 trans（48）  然后立刻退出trans(48) 返回到 trans(483) ,再退出trans(483) 返回到main() ,加了return 后 putchar 这句话将得不到运行所以打印不出来。

user: user-2
content: 引用 6 楼 飞禽走兽卍一2b 的回复:[quote=引用 3 楼 自信男孩的回复:]不加return，只要有退出函数的条件就行，防止函数一直递归下去，而无终止。  void trans(int n) {           if((n/10)!=0)         {            trans(n/10);//输入483，不加return输出483，加return输出4         }             putchar(n%10+'0'); } 这个其实也算是有退出条件的，即n/10 == 0；  所以如果要加return的话，可以这么加: #include <stdio.h> #include <stdlib.h>  void trans(int n) {     if (n/10 == 0) {         putchar(n%10+'0');         return;     }     if((n/10)!=0)     {         trans(n/10);//输入483，不加return输出483，加return输出4     }       putchar(n%10+'0'); }  int  main() {     printf("hw 7.17\n");     int n;     printf("Please enter an interger:\n");     scanf("%d",&n);     if(n>0)     {          trans(n);     }     if(n<0)     {         putchar('-');          int abs_n=abs(n);         trans(abs_n);     }   } 供参考～  递归不一定非要return，但是一定要有递归终止的条件。 如果按你写的加return的话，输入483，只会输出4，所以我想知道是怎么执行的[/quote] 你确定执行了我的代码了吗？如果不确定，那就粘贴我的代码到编译器，然后编译执行一下～  如果只是分析得出你的结论，所以还需要执行一下比较好。  我发的代码基本上很少没经过自测的～