| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1816 人关注过本帖
标题:一个递归调用与返回值的问题,有难度
只看楼主 加入收藏
youlong699
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-30
收藏
 问题点数:0 回复次数:13 
一个递归调用与返回值的问题,有难度

程序如下:
#include<iostream.h>
class A
{
int i;
public:
A(){i=0;cout<<"Default Called!\n";}

A(int x){i=x;cout<<"Constructor Called!\n";}

A(A & t){i=t.i;cout<<"Copy-constructor Called!\n";}

~A(){cout<<"Destructor Called!\n";}

A & operator = (A & t){i=t.i;cout<<"Operator= Called!\n";return *this;}

void display(void){cout<<"$$$$$$$$$$$$$$$\n";cout<<i<<endl;}
};

A fun(A & t, int i)
{
if(i==0)return t;
cout<<endl;
fun(t,--i); //注意,这里没用return;

}

void main()
{
A a(5),b;
int i=3;
cout<<"@@@@@@@@@@@@@@@@\n";
b=fun(a,i);
b.display ();
cout<<"***************\n";
cout<<"End!\n";
}
以下是运行结果:
/*
Constructor Called!
Default Called!
@@@@@@@@@@@@@@@@

Copy-constructor Called!
//出现三个析构函数?????(为什么没有相应的构造函数??)
Destructor Called!
Destructor Called!
Destructor Called!
Operator= Called!
Destructor Called!
$$$$$$$$$$$$$$$
4350224 //结果不正确,若在fun()中添加return就可以得到正确结果,但同样的用法在下面的程序中却能得到正确结果!
***************
End!
Destructor Called!
Destructor Called!
Press any key to continue*/
******************************

类似用法,但参数类型为 int

#include<iostream.h>
int fun(int n)
{
if(n==1)
return n;
fun(n-1);
}
void main()
{

int b;
b=fun(5); //同样没有return!
cout<<b<<endl;
}
结果::
/*
1
Press any key to continue*/

[此贴子已经被作者于2007-5-30 18:10:20编辑过]

搜索更多相关主题的帖子: 返回值 递归 cout 难度 
2007-05-30 18:06
youlong699
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-30
收藏
得分:0 
以下是引用su11237880在2007-5-30 18:28:05的发言:

有42错的```

貌似大侠,可老兄你倒是说明白点啊!

2007-05-31 11:50
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
int fun(int n)
{
if(n==1)
return n;
fun(n-1);
}
没有返回值不会报错吗?

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-05-31 15:52
youlong699
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-30
收藏
得分:0 
回复:(wfpb)int fun(int n){ if(n==1) retur...
不报错,if语句后已经有一个return 了,只有警告。
2007-05-31 17:18
wfpb
Rank: 6Rank: 6
等 级:贵宾
威 望:29
帖 子:2188
专家分:0
注 册:2006-4-2
收藏
得分:0 
应该会说:“不是每种情况都用返回”啊!

[glow=255,red,2]wfpb的部落格[/glow] 学习成为生活的重要组成部分!
2007-05-31 20:22
youlong699
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-30
收藏
得分:0 
是啊,只是警告warning C4715: 'fun' : not all control paths return a value是这样的。但结果是正确的,还有个折半查找的函数也基本上是这么个用法,我也是从那个折半查找的函数开始研究的。
2007-05-31 20:44
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
得分:0 
没有返回值
应该是不正确的
尽管可能没有错误提示

当你开始怀疑自己时,说明你已经失去了判断力
2007-05-31 21:06
youlong699
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-30
收藏
得分:0 
但是在一定范围内是正确的,关键是有没有人能从递归调用与返回值如何返回的解释一下,比如那个运行时栈的概念
2007-06-01 12:10
youlong699
Rank: 1
等 级:新手上路
帖 子:18
专家分:0
注 册:2007-3-30
收藏
得分:0 
不能沉了啊
2007-06-01 22:38
边城路人
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:9
帖 子:591
专家分:0
注 册:2007-3-8
收藏
得分:0 
你可以理解为循环
当满足你的条件是就会结束
栈是运行时开辟的空间
就相当于一个容器
你最好看一下数据结构这本书

当你开始怀疑自己时,说明你已经失去了判断力
2007-06-02 11:30
快速回复:一个递归调用与返回值的问题,有难度
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.019590 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved