|
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、这跟递归完全没有关系
|