一个简单的递归问题……

underuwing 2009-11-16 12:18:52
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test";
while(i--)
fun();
}
int main()
{
fun();
return 0;
}

我的本意是输出i个test,结果却一直输出。那个while循环没有起到控制作用吗?
...全文
130 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
forster 2009-11-16
  • 打赏
  • 举报
回复
没看清楚 用个while怪怪的
forster 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test";
while(--i)
{
fun();
i=1;//解除外围循环
}
}
int main()
{
fun();
return 0;
}
underuwing 2009-11-16
  • 打赏
  • 举报
回复
2楼那个可以完成,但不是递归。3楼的输出是1+1+2+4+8……个test。4楼的正确,是输出i个test。我对递归确实很迷糊。谢谢你们的解答!!
「已注销」 2009-11-16
  • 打赏
  • 举报
回复
或者:
#include <iostream>
using namespace std;

int i=2;

void fun()
{
cout<<"test: " << i << endl;
if (--i) fun();
}
int main()
{
fun();
return 0;
}
la_feng 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test";
i--;
if(i!=0)
fun();


}
int main()
{
fun();
return 0;
}
「已注销」 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

int i=2;

void fun()
{
cout<<"test: " << i << endl;
--i;
if (i != 0) fun();
}
int main()
{
fun();
return 0;
}
luolaigen2008 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test\n";
while( (i--) ); //只会打印i次test,但是是死循环
fun();
}
int main()
{
fun();
return 0;
}
la_feng 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
if(i==0)
exit(0);
cout<<"test";
while(i--)
fun();
}
int main()
{
fun();
return 0;
}
mmidd 2009-11-16
  • 打赏
  • 举报
回复
fun( int i )
{
if ( i == 0 )
return;
else
fun(--i);
}
sj13426074890 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test";
while (i!=0)
{
--i;
fun();

}

}
int main()
{
fun();
return 0;
}
jenf 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test";
i--;
while(i)
{
fun();
}
}
int main()
{
fun();
return 0;
}
underuwing 2009-11-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 forster 的回复:]
改成--i。。。
[/Quote]还是一直输出
luolaigen2008 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{
cout<<"test";
while( (i--) && (i>0) )
fun();
}
int main()
{
fun();
return 0;
}
这样就OK了。
lgccaa 2009-11-16
  • 打赏
  • 举报
回复
递归的思想是什么,你根本都没弄清楚

void fun(int i)
{
if(i == 1)
cout<<"test";

while(i>1)
{
i--;
fun(i);
}
}

随手写了一个,自己看看在写一写吧。
「已注销」 2009-11-16
  • 打赏
  • 举报
回复
换成这个:
do { fun() } while (--i);
forster 2009-11-16
  • 打赏
  • 举报
回复
改成--i。。。
hecha 2009-11-16
  • 打赏
  • 举报
回复

cout << "test:" << i << endl;
while (i--) // i = 1
cout << "test:" << i << endl;
while (i--) // i = 0
cout << "test:" << i << endl;
while (i--) // 这里循环终止, 之后 i = -1
// 因为 i = -1, 所以外面的 while 不会终止
underuwing 2009-11-16
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;
int i=2;
void fun()
{

cout<<"test:"<<i<<endl;
while(i--)
fun();


}
int main()
{
fun();
return 0;
}

这个程序,while(0)的时候为什么停不住?
黑娃 2009-11-16
  • 打赏
  • 举报
回复
你出错的根本不在于i--还是--i,而是你没有判断递归退出的条件。比如在递归前加上if(i = 0) return 0;
如果不这样判断,即使在某一层次的递归调用时i==0了,也只是让那一层的fun没有调用,继而回到上一层,继续执行i--,使得i一直负下去,所以永真,永远执行了。
guide: 1、此程序为汉诺塔程序(此代码用到递归,包括直接递归和间接递归(间接递归是用在了重复使用本程序那块)); 2、此程序的代码流程是,由main函数进入之后,先后调用的函数是由上至下定义的; 3、亲爱的朋友,请尊重偶的版权,你也会得到相应的尊重哦! 4、若此程序或代码有不足或不对的地方,还望得到指正! 5、循环虽然比递归算法快,但比较而言,递归更容易让人理解! purpose: 1、培养独立思考算法的能力,特别是递归时,用到的是数学中的数列,找到整个递归的最先出栈的函数,以及数列的第n项与第n-1项的关系就能用递归解决问题; 2、通过试数来推算自己的程序逻辑是否有beg,并找出修复之; 3、熟练一下结构体和链表的基本推理,尤其是插入和删除元素时指针的走向! function: 1、简易输出汉诺塔步骤(由哪根柱子移到哪根柱子); 2、详细输出汉诺塔步骤(在功能1基础上逐步输出每次移动之后的盘子分布); 3、二维详细输出汉诺塔步骤(在前2功能基础上逐步输出二维盘子分布图); 4、动态二维输出汉诺塔步骤(在前3功能基础上演示动态输出并提示下一步); 5、可重复使用本程序! 在VC++6.0中的输出结果是: --------------------------- ………… 开始移动: 第1次移动过程: A(1号盘)→B 此时灰原の盘子分布图: A柱子 B柱子 C柱子 ↓ ↓ ↓ 1层为空层 第2层: 2* 1* 请按任意键继续. . . 第2次移动过程: A(2号盘)→C 此时灰原の盘子分布图: A柱子 B柱子 C柱子 ↓ ↓ ↓ 1层为空层 第2层: 1* 2* 请按任意键继续. . . 第3次移动过程: B(1号盘)→C 此时灰原の盘子分布图: A柱子 B柱子 C柱子 ↓ ↓ ↓ 第1层: 1* 第2层: 2* 请按任意键继续. . . 请问您是否要继续重玩游戏,需要重玩请按“Y”,否则按“N”结束程序! ………… ---------------------------

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧