| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1140 人关注过本帖
标题:不明白,要多问。
取消只看楼主 加入收藏
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:20 
不明白,要多问。
程序代码:
#include <stdio.h>

unsigned int f, x;
unsigned int factorial(unsigned int a);

int main( void )
{
    puts("Enter an integer value between 1 and 8: ");
    scanf("%d", &x);

    if( x > 8 || x < 1)
    {
        printf("Only values from 1 to 8 are acceptable!");
    }
    else
    {
        f = factorial(x);
        printf("%u factorial equals %u\n", x, f);
    }

    return 0;
}

unsigned int factorial(unsigned int a)
{
    if (a == 1)
        return 1;
    else
    {
        a *= factorial(a-1);
        return a;
    }
}


实在是不懂啊

计算阶乘的,  求教。 为什么 在最后第3、4行 这 代码会循环,并且每次循环 a都会在减去一个1.直到a==1 为真,  还有 那个 最后 那几个 return a; 和 return 1; 有什么作用,我改了它 为什么程序就不能正确的运作了

[ 本帖最后由 编译中。。 于 2011-8-2 17:35 编辑 ]
2011-08-02 16:03
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
回复 2楼 pangding
的确是递归, 书上 了了带过。我就想明白,为什么 他会一直执行直到 a==1
  还有那2个return  有什么用

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 16:39
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
4楼

其实 说白了,就是最后那几行有用。我就是想不明白  如果a  !=1    那就是执行 a *= factorial(a-1); 不是吗? 执行完了之后,不是 return a;了吗? 那这个 函数应该 结束了的。为什么还会 重新的 再次被使用。   你看懂了吗?  那你讲讲大概吧
   我去网上看看return的 用法

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:05
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
恩,还有那个 return 1

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:09
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
这个问完了,今天内容就剩看视频了

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:11
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
追问,return 1 ;  的问题。 当你输入的数为1的时候,确实直接输出1.这是你的解释。 但当那个a *= factorial(a-1);   被执行很多次之后 ,a就会变成1了,那a==1 不就是成立了,对吧。   既然成立了,他就会 把 1 这个值返回给 f  。那最后的输出不是应该是1 吗?  

这么说 吧。    输入3 这个数字  a *= factorial(a-1);  第一次执行的时候, a是 3-1   第二次的时候a是 3-2   
第三次循环是,a已经为1了,那么 if就成立了,成立了 他就会 return 1;  那为什么f的结果 不是1.

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:33
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
原来是我题目打错了。  return 0  应该改成 return 1  我去编辑,  还有 求我上面的问题答案  谢了风生钧起

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:35
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
我在这个程序 输入1个 4.     程序执行  :4被赋到了x里,x的值 被赋到了a 里。 即a等于4。 然后判断a不是1,执行a*factorial(a-1)   。接着循环(我还是不懂为啥会循环) ....接下来 能不能帮我分析一下

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:48
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
回复 15楼 风生钧起
我是说我的问题打错了,不是程序。、我吃饭去了。  呵呵。我还是想不明白啊啊。可恶。  等下吃玩饭,我去找些递归的题目,源代码 看看

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 17:50
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
那你帮我分析一下,整个流程

即我在这个程序 输入1个 4.     程序执行  :4被赋到了x里,x的值 被赋到了a 里。 即a等于4。  这之后 你帮我分析一下,他将会干什么,详细点 好不

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 18:07
快速回复:不明白,要多问。
数据加载中...
 
   



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

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