标题:递归法 求阶层,求指教
只看楼主
幻楚
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2013-5-15
结帖率:0
已结贴  问题点数:20 回复次数:17 
递归法 求阶层,求指教
C语言编程,自己写的程序,但是,貌似将问题复杂化了,有没有更简洁的。。。。。求大神!!!求指教!!!!!
#include"stdio.h"
void main()
{
   int fac(int n);
   int n;
   int y;
   printf("input an integer number:");
   scanf("%d",&n);
   y=fac(n);
   printf("%d!=%d\n",n,y);
}
  int fac(int n)
  {
      int f;
      if(n<0)
          printf("n<0,data error!");
      else if(n==0||n==1)
          f=1;
      else f=fac(n-1)*n;
      return(f);
  }
搜索更多相关主题的帖子: void include number C语言 
2013-05-16 14:33
qunxingw
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:24
帖 子:1676
专家分:7295
注 册:2011-6-30
得分:2 
思路简洁与表达简洁有区别

www.qunxingw.wang
2013-05-16 15:04
幻楚
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2013-5-15
得分:0 
什么区别???我就觉得我的表达就是不简洁,,,

C plus plus
2013-05-16 15:08
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:2 
必要的判断是必须的,你想如何简便呢

Maybe
2013-05-16 15:12
幻楚
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2013-5-15
得分:0 
我觉得后面的判断有点复杂!!

C plus plus
2013-05-16 15:13
惊叹者
Rank: 1
等 级:新手上路
帖 子:38
专家分:5
注 册:2013-3-5
得分:2 
回复 楼主 幻楚
已经很简洁了啊
2013-05-16 15:26
秦殇
Rank: 2
等 级:论坛游民
帖 子:61
专家分:77
注 册:2013-3-13
得分:2 
目测没什么问题。
2013-05-16 16:54
笑傲
Rank: 8Rank: 8
来 自:迪拜
等 级:蝙蝠侠
威 望:5
帖 子:223
专家分:856
注 册:2013-3-9
得分:2 
思路已经很简洁了,判断都是必须的;并非判断少就是简洁!
不过还是做了一点改动,看看吧,思路都一样的;
程序代码:
#include"stdio.h"
#include<stdlib.h>

void main()
{
   int fac(int n);
   int n;
   int y;
   printf("input an integer number:");
   scanf("%d",&n);
   y=fac(n);
   printf("%d!=%d\n",n,y);
}
int fac(int n)
{
      if(n<0)
      {
          printf("n<0,data error!\n");
          exit(0);                 //主要这里如果n<0,就应该退出;
      }
      else if(n==0||n==1)
          return 1;
      else return fac(n-1)*n;
}

练就一身本领,只为笑傲江湖!
2013-05-16 17:02
justlxy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:158
注 册:2013-5-14
得分:2 
#include"stdio.h"
#include<stdlib.h>
void main()
{
    inline int fac(int n);        //可以将此函数声明为内联函数,减少程序的执行时间
    int n;
    printf("input an integer number:");
    scanf("%d",&n);
    printf("%d!=%d\n",n,fac(n));
}
int fac(int n)
{
    if(n<0)
    {
        printf("n<0,data error!\n");
        exit(0);               
    }
    else if(n==0||n==1)
        return 1;
    else return fac(n-1)*n;
}
2013-05-16 19:02
justlxy
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:28
专家分:158
注 册:2013-5-14
得分:0 
还有一点就是文件包含的符号不要乱用;
# include "文件名" (1);
# include <文件名> (2);
这两种不同的形式存在一定的区别:尖括号表示先在系统默认的包含文件目录中去查找,若没有再到源程序所在的目录查找;
双引号表示先在源程序所在的文件目录查找,若没有再在系统默认的包含文件目录中查找。
显然stdio.h是保存在系统默认的文件包含目录中的。因此应用尖括号!
即程序应为:
#include<stdio.h>
#include<stdlib.h>
void main()
{
    inline int fac(int n);
    int n;
    printf("input an integer number:");
    scanf("%d",&n);
    printf("%d!=%d\n",n,fac(n));
}
int fac(int n)
{
    if(n<0)
    {
        printf("n<0,data error!\n");
        exit(0);                 //主要这里如果n<0,就应该退出;
    }
    else if(n==0||n==1)
        return 1;
    else return fac(n-1)*n;
}
2013-05-16 19:09



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-407248-1-1.html




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

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