两道递归题——困惑

happyzhang 2005-03-12 12:48:06
1.写一个计算斐波那挈数列的递归函数(即后面一项为前两项之和)。
2.编写一个递归函数,用来输出n个元素所有子集。
此二题困惑已久,望高手指点。
...全文
110 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ybt631 2005-03-12
  • 打赏
  • 举报
回复
被抢先了,算了,就不贴代码了!
pcboyxhy 2005-03-12
  • 打赏
  • 举报
回复
int print(int i) //i表示第i个元素。从第0个开始
{
if(i>=xmaxlen) //i和总个数一样了,因为i开始于0,所以已经到达边缘了,输出一个子集
{
int j,k=0;
++xnum;
cout<<"No."<<xnum<<'=';
cout<<"{";
for(j=0;j<xmaxlen;j++)
if(bo[j]) //bo[j]表示第j个元素是否在子集中
{
if(k)
cout<<',';
cout<<str[j];
++k;
}
cout<<"}"<<endl;
return 0;
}
else //还没有到达边缘。
{
bo[i]=true; //i放入子集,并继续处理下一个
print(i+1);
bo[i]=false; //i标记为不放入子集,并继续处理下一个
print(i+1);
}
return 0;
}
pcboyxhy 2005-03-12
  • 打赏
  • 举报
回复
1.

#include <iostream>
#include <cstdlib>

using namespace std;

int fib(int n)
{
if(n==1 || n==2)
return 1;
else
return ( fib(n-1)+fib(n-2) );
}

int main(int argc, char *argv[])
{
int test;
cin>>test;
cout<<endl<<fib(test);
system("PAUSE");
return 0;
}
pcboyxhy 2005-03-12
  • 打赏
  • 举报
回复
2.
输入一个字符串作为集合。
比如
abcd

#include<iostream>

using namespace std;

char*str;
bool bo[100];
int xmaxlen;
long xnum=0;

int print(int i)
{
if(i>=xmaxlen)
{
int j,k=0;
++xnum;
cout<<"No."<<xnum<<'=';
cout<<"{";
for(j=0;j<xmaxlen;j++)
if(bo[j])
{
if(k)
cout<<',';
cout<<str[j];
++k;
}
cout<<"}"<<endl;
return 0;
}
else
{
bo[i]=true;
print(i+1);
bo[i]=false;
print(i+1);
}
return 0;
}
int main( int argc, char * argv[] )
{
cout<<"Input the collect."<<endl;
str=new char[100];
cin>>str;
xmaxlen=strlen(str);
print(0);
delete []str;
return 0;
}

65,206

社区成员

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

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