| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1284 人关注过本帖
标题:递归+循环,请教[在线等待了]
只看楼主 加入收藏
小小
Rank: 1
等 级:新手上路
威 望:1
帖 子:219
专家分:0
注 册:2004-5-31
收藏
 问题点数:0 回复次数:10 
递归+循环,请教[在线等待了]

写个程序

1!+2!+3!+4!+……+15!=?

相信这个程序对你们很简单吧

我写了,答案不对

long refact(int n)/*定义一个递归函数 */

{ if(n>1) return(n*refact(n-1)); else if(n=1) return(1); }

main()

{ int a=0;int n=1;

while(n<=15)

{a+=refact(n);

n++;

}

printf("%d\n",a);

getch() ; }

请教

[此贴子已经被作者于2004-11-03 22:19:58编辑过]

搜索更多相关主题的帖子: 递归 在线 
2004-11-03 21:55
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
收藏
得分:0 
你那个程序看起来也是对啊,我估计是你递归里面的if(n==1)你写成(n=1)了,
不过也可以只用一个递归来求解的,
你要这样思考:
f(n)求出的是1的阶乘到n的阶乘的和,
而f(n+1)就是f(n)的基础上加上(n+1)!,即f(n+1)=f(n)+(n+1)!,
而(n+1)!就是n!*(n+1),
而n!你能够求出来,就是f(n)-f(n-1),
最后就是f(n+1)=(n+2)f(n)-(n+1)f(n-1),
所以结果也就出来了,下面是程序
long refact(int n)
{
if (n==0)
return 0;
else if (n==1)
return 1;
else
return (n+2)*f(n)-(n+1)*f(n-1);
}

欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-11-03 22:31
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
收藏
得分:0 
错了一点,我那个是求f(n+1),
要把上面的程序的n改成n-1

欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-11-03 22:33
小小
Rank: 1
等 级:新手上路
威 望:1
帖 子:219
专家分:0
注 册:2004-5-31
收藏
得分:0 

要关灯了

明天再来慢慢理解

先谢谢你了 晚安


有一天咖啡的舞者 £
2004-11-03 22:58
三少爷
Rank: 1
等 级:新手上路
帖 子:192
专家分:0
注 册:2004-4-29
收藏
得分:0 

递归部分应该没错,只要把a设为long型,另外输出的格式控制符改为%ld,就可以了哦?

答案是不是1443297817啊?


2004-11-03 23:31
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
收藏
得分:0 
就是他的if语句里面的判断的==写成=了,

欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-11-03 23:48
aniude
Rank: 2
等 级:新手上路
威 望:3
帖 子:231
专家分:0
注 册:2004-11-3
收藏
得分:0 

#include <stdio.h> long digui(int k) { long t; long sum; if(k==1) {t=1; sum=1; } else if(k>1) {t=k*digui(k-1); sum=sum+t; return sum; } } void main() { int j; long b; scanf("%d",&j); b=digui(j); printf("%ld",b); }

哈哈,这是ME的方法!


2004-11-04 05:02
lyn_gemini
Rank: 1
等 级:新手上路
帖 子:103
专家分:3
注 册:2004-9-15
收藏
得分:0 
以下是引用aniude在2004-11-04 05:02:07的发言:

#include <stdio.h> long digui(int k) { long t; long sum; if(k==1) {t=1; sum=1; } else if(k>1) {t=k*digui(k-1); sum=sum+t; return sum; } } void main() { int j; long b; scanf("%d",&j); b=digui(j); printf("%ld",b); }

哈哈,这是ME的方法!

你实验过你这个方法吗?好多地方逻辑都不对,

你的递归里面定义了sum和t,每次执行之前sum和t都需要初始化的,

估计编译都过不去。

不过解决方法是把sum设为static型的,然后里面一些逻辑还需要改一下。


欢迎访问我的博客--*IT一粟*-- : http://lyn_gemini.
2004-11-04 09:52
时空之蕊
Rank: 2
等 级:新手上路
威 望:3
帖 子:691
专家分:0
注 册:2004-10-31
收藏
得分:0 

楼主你的程序是不是不符合你的本意啊!! 有几点错误的地方!!

1。第归函数中if(n=1)是不是笔误,虽然不更改这个错误也能正确地完成本程序的功能,但是这么写肯定不好啦!!

2。第二在论坛里卖弄曾经讨论过的问题就是N!的溢出的问题,15!=1307674368000,而long int的最高值是:2147483647,unsigned long的是4294967295都远小于15!所以说你肯定得不到正确的结果的!!

求n!在这里有!!好像因为论坛升级删除了!!


我渴望掌控时空的核心——用最先进的技术,打造无比美丽的世界!
2004-11-04 09:58
小小
Rank: 1
等 级:新手上路
威 望:1
帖 子:219
专家分:0
注 册:2004-5-31
收藏
得分:0 
以下是引用时空之蕊在2004-11-04 09:58:42的发言: 2。第二在论坛里卖弄曾经讨论过的问题就是N!的溢出的问题,15!=1307674368000,而long int的最高值是:2147483647,unsigned long的是4294967295都远小于15!所以说你肯定得不到正确的结果的!!

求n!在这里有!!好像因为论坛升级删除了!!

首先感谢斑竹和回复我帖子的朋友们。

然后还想说,我不会卖弄啊,我是真的不知道的,以前没看过这个问题,那我 这题也是在书上看的,是《C++程序设计教程》清华大出版 钱能主编的 第74页的4。2题 啊

那应该这么做这题呢?


有一天咖啡的舞者 £
2004-11-04 10:27
快速回复:递归+循环,请教[在线等待了]
数据加载中...
 
   



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

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