| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1140 人关注过本帖
标题:不明白,要多问。
只看楼主 加入收藏
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
结帖率:75%
收藏
已结贴  问题点数:20 回复次数:40 
不明白,要多问。
程序代码:
#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
pangding
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:北京
等 级:贵宾
威 望:94
帖 子:6784
专家分:16751
注 册:2008-12-20
收藏
得分:0 
这个是递归,楼主学过吗?和循环有一定的区别。
2011-08-02 16:37
编译中。。
Rank: 7Rank: 7Rank: 7
来 自:中国
等 级:黑侠
帖 子:198
专家分:511
注 册:2011-7-29
收藏
得分:0 
回复 2楼 pangding
的确是递归, 书上 了了带过。我就想明白,为什么 他会一直执行直到 a==1
  还有那2个return  有什么用

 当我感到些许疲倦时   便想躺在阳光下,小路旁 . 可这些往往都是奢望..
2011-08-02 16:39
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:5 
我没 学过递归  但 我却看懂了

我相信你 把以前学过知识 全用上  要理解 是没问题的  if````else```` || 主和被掉函数关系 return 等用法你先 用上去看

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 16:58
编译中。。
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: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
你是 return a这没看懂吗?

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 17:08
编译中。。
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: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
调试了下你的程序 !的确非常正确
return 1 1的阶乘的值

return a 把在被调函数里处理的值返回主函数
至于 它为什么循环 你在仔细看看被调函数

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 17:27
风生钧起
Rank: 4
来 自:江西
等 级:业余侠客
帖 子:383
专家分:246
注 册:2011-7-26
收藏
得分:0 
return 0;想必你很清楚了  有帖子详细 说明过

墨一世红颜倾醉己    霁天谁与话风流

修仙``````````````````````````````````````````````
2011-08-02 17:29
快速回复:不明白,要多问。
数据加载中...
 
   



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

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