您的位置:首页 > 其它

几个递归小题

2017-01-10 13:32 246 查看


代码:

#include<iostream>
using namespace std;
int f(int n)
{
if (n==1)
return 1;
return n*f(n-1);
}
int main()
{
int n,i;
double s=1;
cin>>n;
for (i=1;i<=n;i++)
{
s+= (double)1.0/f(i);
}
cout<<s<<endl;
return 0;
}


代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int f(int n)
{
if (n==1)
return 1;
else if (n==2)
return 2;
else
{
return 3*f(n-1)-2*f(n-2);
}
}
int main()
{
int n,i,s;
cin>>n;
for (i=1;i<=n;i++)
s+=f(i);
printf("第%d项:%d",n,f(n));
printf("之和:%d",s);
return 0;
}

4-4  递归求解双递推摆动数列 已知递推数列: 

    a(1)=1,a(2i)=a(i)+1,a(2i+1)=a(i)+a(i+1),(i为正整数)

试建立递归,求该数列的第
n(n<100000)
项与前
n
项的和。
试建立递归,求该数列的第
n(n<100000)
项与前
n
项的和。
试建立递归,求该数列的第n(n<100000)项与前n项的和。

代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int f(int n)
{
if (n==1)
return 1;
else if (n%2==0)
return f(n/2)+1;
else
return f((n+1)/2)+f((n+1)/2);
}
int main()
{
int n,i,s=0;
cin>>n;
for (i=1;i<=n;i++)
{
s+=f(i);
}
printf("第%d项为:%d",n,f(n));
printf("之和为:%d",s);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: