vc++中引用的问题

#include<iostream.h>intf(int&m){m--;if(m==0)return1;elsereturnm+f(m);}voidmain(void){... #include <iostream.h>
int f(int& m)
{

m--;

if(m==0) return 1;

else return m+f(m);

}
void main(void)
{

int a=5, b=8;

cout << f(a) << endl;

cout << f(b) << endl;
}

函数中的参数为引用变量&m时,运行的结果是1,1;函数中的参数为m 时,运行结果为11,29.请教各位高手为什么会有上述区别?谢谢啦
展开
 我来答
很会搞笑
推荐于2016-11-09 · TA获得超过179个赞
知道小有建树答主
回答量:176
采纳率:0%
帮助的人:0
展开全部
引用你可以理解为指针(只是可以这样理解,两者还是有不少的区别)。如果函数的形参为引用,传递时只是使用一块固定的空间,如果不是引用,每次调用子函数,形参就相当于局部变量,每次都会重新开辟空间。
当使用引用时,每次调用 都操作一个固定地址空间下的m,每次m--都是一个m,最后一次递归调用是 f(1),进入后m--(m == 0了),return m+1 = 1
当不使用引用时,每次调用都会为m开辟空间,递归的执行过程如下:
以f(a)为例
f(5) = 4 + f(4)
= 4 + 3 + f(3)
= 4 + 3 + 2 + f(2)
= 4 + 3 + 2 + 1 + f(1)
= 4 + 3 + 2 + 1 + 1
= 11
baby速度12
高能答主

推荐于2016-04-30 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:4万
采纳率:86%
帮助的人:2942万
展开全部
引用你可以理解为指针(只是可以这样理解,两者还是有不少的区别)。如果函数的形参为引用,传递时只是使用一块固定的空间,如果不是引用,每次调用子函数,形参就相当于局部变量,每次都会重新开辟空间。
当使用引用时,每次调用 都操作一个固定地址空间下的m,每次m--都是一个m,最后一次递归调用是 f(1),进入后m--(m == 0了),return m+1 = 1
当不使用引用时,每次调用都会为m开辟空间,递归的执行过程如下:
以f(a)为例
f(5) = 4 + f(4)
= 4 + 3 + f(3)
= 4 + 3 + 2 + f(2)
= 4 + 3 + 2 + 1 + f(1)
= 4 + 3 + 2 + 1 + 1
= 11
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
飘叶追踪
2008-01-26 · TA获得超过186个赞
知道答主
回答量:56
采纳率:0%
帮助的人:75.8万
展开全部
没有使用引用符号的话, 每次递归后都返回一个迭代的值, 而且外层的不变, 所以值是增大的, 如果使用了引用, 每次递归的时候m的值都减了1, 最终m的值为0, 返回的结果为0+ f(0)也就是1了, 不管参数多大, 得到的结果全是1. 这就是声明为引用的形参改变的话, 实参也会改变.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
ssxb_20
2008-01-27
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
引用的操作是对变量本身,
而非引用的传递就像对一个副本进行操作,对原来的变量值,没有影响
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式