递归问题!!!!!

ilbj 2003-07-14 12:15:04
p=1+2!+3!+4!+...+(n-1)!+n!
如何用递归算法实现??
...全文
65 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
fixopen 2003-07-14
  • 打赏
  • 举报
回复
template<int i>
class FACTOR
{
public:
enum
{
RESULT = i * FACTOR<I-1>::RESULT
};
};

class FACTOR<1>
{
public:
enum
{
RESULT = 1
};
};

class SUM<int i>
{
public:
enum
{
RESULT = FACTOR<i>::RESULT + FACTOR<i - 1>::RESULT;
};
};

如果你非常注重性能的话,你可以使用上一方案。:)
hillyee 2003-07-14
  • 打赏
  • 举报
回复
fun(a)
{int a,b;
if(a==1) return b=1;
if(a>1)
{b=a*fun(a);
return b;
}
}
main()
{int sum=0,x,n;
printf("n=%d",n);
scanf("%d",&n);
for(x=1;x<=n;x++) sum+=fun(x);
printf("sum=%d",sum);
}
zteliubin 2003-07-14
  • 打赏
  • 举报
回复
理解不过来,就:

fact(n)
{
if(n==0) return 1;
return n*fact(n-1);
}

fact_sum(n)
{
if(n==1) return 1;
return fact(n)+fact_sum(n-1);
}

不过栈要求高得多!
sam1111 2003-07-14
  • 打赏
  • 举报
回复
sorry,

是fact_sum(0, 1, 1, n);
sam1111 2003-07-14
  • 打赏
  • 举报
回复
int fact_sum(int s, int f, int i, int n)
{
if(i > n)
return s;

s += fact_sum(s, f*i, i+1, n);

return s;
}

fact_sum(0, 1, 0, n);
ajoo 2003-07-14
  • 打赏
  • 举报
回复
fact_sum(s, f, i, n){
if(i>n) return s;
else return fact_sum(s+f, f*(i+1), i+1, n);
}
fact_sum(0, 1, 1, n);
晨星 2003-07-14
  • 打赏
  • 举报
回复
p = 1 + 2(1 + 3(1 + 4(1 + ……(1 + n) …… )))
ajoo 2003-07-14
  • 打赏
  • 举报
回复
fact_sum(f, i, n){
if(i>n) return f;
else return fact_sum(f*i, i+1, n);
}
fact_sum(1, 2, n);
bigtea 2003-07-14
  • 打赏
  • 举报
回复
如果要好理解的,那就是在n!的递规函数的基础上,构造递规,因为楼主的表达式直读也是这个意思。
long factorial(int n) /*n!的递规函数*/
{
if (n<2) return 1;
else return (factorial(n-1)*n);
}
long fac_sum(int n) /*楼主的表达式递规实现*/
{
if (n<2) return 1;
else return (fac_sum(n-1)+factorial(n)); /*p(n)=p(n-1)+n!*/
}
main()
{
int n;

scanf("%d",&n);
printf("%ld",fac_sum(n));
}
98440622 2003-07-14
  • 打赏
  • 举报
回复
#include "iostream.h"

int element(int n)
{
if (n == 0)
return 1;
else
return n * element(n - 1);
}

int value(int m)
{
if (m == 1)
return 1;
else
return element(m) + value(m - 1);
}

void main()
{
cout<<value(3)<<endl;
}

注意n值的范围:-)
lyff8neo 2003-07-14
  • 打赏
  • 举报
回复
同意 hillyee(山之笛)!仅限tc!
fun(a)
{int a,b;
if(a==1) return b=1;
if(a>1)
{b=a*fun(a);
return b;
}
}
main()
{int sum=0,x,n;
printf("n=%d",n);
scanf("%d",&n);
for(x=1;x<=n;x++) sum+=fun(x);
printf("sum=%d",sum);
}
但是这边的int sum=0,x,n;
printf("n=%d",n);需要修改,在这里n是随机的必然打出来n=0啊!所以在这里只要写成printf("n=%d");就行了,你这是画蛇添足了哦^_^

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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