C语言中返回值问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中返回值问题相关的知识,希望对你有一定的参考价值。

long fun(int n)

long s;
if(n==1||n==2) s=2;
else s=n-fun(n-1);
return s;//如果执行这个语句,这个S值返回到什么地方?

main()

printf("%ld",fun(4));

这是一个典型的递归调用的问题
当第一次进入
fun(int n)//此时n=4

long s;
if(n==1||n==2)
s=2; //条件不成立会执行else
else
s=n-fun(n-1); 这个时候会再次调用本函数
return s;

这时会第二次进入
fun(int n)//此时n=3

long s;
if(n==1||n==2)
s=2; //条件还不成立会执行else
else
s=n-fun(n-1); 这个时候还会再次调用本函数
return s;

这时会第三次进入
fun(int n)//此时n=2

long s;
if(n==1||n==2)
s=2; //条件成立
else
s=n-fun(n-1);
return s;//此时返回2,会返回到第二次调用它的地方

第二次调用的地方为:
s=n-fun(n-1)//通过第三次执行fun(n-1)已经得到结果为2,此时的s为1
此时第二次调用会返回5,然后程序返回到第一次调用的地方
第一次调用的地方为:
s=n-fun(n-1)//通过第二次执行fun(n-1)已经得到结果为1,此时的s为3
输出结果为3
参考技术A 返回到输出语句也就是printf()中,
即直接输出到屏幕上了
参考技术B 返回到函数的调用那里 参考技术C 调用fun(4)后返回一个值(s)。
printf("%ld",fun(4));差不多等于 printf("%ld",s);
参考技术D 这要看编译器如何生成代码了,与参数入栈以及入栈顺序有关

以上是关于C语言中返回值问题的主要内容,如果未能解决你的问题,请参考以下文章

C语言返回多个值的方法

C语言中函数返回值的问题

C语言返回值 输出

c语言中的RETURN()返回值是啥意思?

C语言中函数调用怎么返回两个值

C语言函数返回值为 const 型 有啥意义