| 
 | 
 
10鱼币 
- #include <stdio.h>
 
 - int a(int n)
 
 - {
 
 -     if(n==2)
 
 -         {
 
 -             return 2;
 
 -         }
 
 -     else
 
 -     {
 
 -         a(2);
 
 -         printf("???%d\n", n*n);
 
 -     }
 
 - }
 
 - int main(int argc, char const *argv[])
 
 - {
 
 -     /* code */
 
 -     printf("%d\n",a(5) );
 
 -     return 0;
 
 - }
 
  复制代码 
你们试着运行下这段程序/
 本帖最后由 Croper 于 2019-3-9 14:08 编辑  
 
1、这是不规范的写法 
2、所谓返回值,其实是eax寄存器里的值。你前一个函数没有返回值,也就是没有对eax寄存器赋值,那么eax寄存器里的值仍然保留之前的值,而倒数第二个修改eax的地方是执行函数printf("???%d\n",n*n)。打印了6个字符,返回6,因此eax寄存器里的值仍然保留6; 
3、这跟递归完全没有关系 
 
 
 |   
 
 
最佳答案
查看完整内容 
1、这是不规范的写法
2、所谓返回值,其实是eax寄存器里的值。你前一个函数没有返回值,也就是没有对eax寄存器赋值,那么eax寄存器里的值仍然保留之前的值,而倒数第二个修改eax的地方是执行函数printf("???%d\n",n*n)。打印了6个字符,返回6,因此eax寄存器里的值仍然保留6;
3、这跟递归完全没有关系 
 
 
 
 
 
 
 |