小兵 发表于 2013-10-5 14:09:31

程序不知道出了什么问题

include <stdio.h>

long factorial(int n);

void main()
{
    long s;
    int n;

    scanf("%d",&n);
   
    s=factorial(n);
    printf("%ld\n",s);
}

long factorial(int n)
{
   
    long p;
    do
    {
      p = factorial(n-1) * n;
    }
    while(n-1<=0);
   
    return p;
}

牡丹花下死做鬼 发表于 2013-10-5 14:14:43

本帖最后由 牡丹花下死做鬼 于 2013-10-5 14:23 编辑

//include <stdio.h>
#include<stdio.h>//漏了#

long factorial(int n);

void main()
{
    long s;
    int n;

    scanf("%d",&n);
   
    s=factorial(n);
    printf("%ld\n",s);
}

long factorial(int n)
{
   
    long p;
    do
    {
      p = factorial(n-1) * n;
    }
    while(n-1<=0);
   
    return p;
}

小兵 发表于 2013-10-5 14:25:46

牡丹花下死做鬼 发表于 2013-10-5 14:14 static/image/common/back.gif


我加上了#号,但是运行时不能运算出希望的结果,我输入一个数字时只能打印出数字本身,不能递归运算出阶乘

牡丹花下死做鬼 发表于 2013-10-5 14:31:53

小兵 发表于 2013-10-5 14:25 static/image/common/back.gif
我加上了#号,但是运行时不能运算出希望的结果,我输入一个数字时只能打印出数字本身,不能递归运算出阶乘 ...

//include <stdio.h>
#include<stdio.h>//漏了#

long factorial(int n);

void main()
{
    long s;
    int n;

    scanf("%d",&n);
   
    s=factorial(n);
    printf("%ld\n",s);
}

long factorial(int n)
{
   
    long p;
       
        if(n > 1)
        {
                p = factorial(n-1) * n;
               
        }
        else
        {
                return 1;
        }
        return p;
}

tsembrace 发表于 2013-10-5 14:36:19

long factorial(int n)
{
   
    if(n==0||n==1)
                return 1;
        else
                return factorial(n-1)*n;
}

小兵 发表于 2013-10-5 14:38:58

我明白用if语句可以实现,现在我想通过while语句完成循环,但是出现了问题,所以就不知道症结在什么地方了?

小兵 发表于 2013-10-5 14:39:51

tsembrace 发表于 2013-10-5 14:36 static/image/common/back.gif
long factorial(int n)
{
   


我明白用if语句可以实现,现在我想通过while语句完成循环,但是出现了问题,所以就不知道症结在什么地方了?

牡丹花下死做鬼 发表于 2013-10-5 14:50:08

小兵 发表于 2013-10-5 14:38 static/image/common/back.gif
我明白用if语句可以实现,现在我想通过while语句完成循环,但是出现了问题,所以就不知道症结在什么地方了? ...

你这么写就是死循环啊 n的值是不会变的呀
谁写递归用循环啊

kensai521 发表于 2013-10-5 14:54:56

n-1完了后 还需要返回 n 。 然后再循环n-1。。。 然后再阶乘完 在返回n-1 无线循环
不知道我说的对不对 应该是这个意思 新手!!

小兵 发表于 2013-10-5 14:55:29

牡丹花下死做鬼 发表于 2013-10-5 14:50 static/image/common/back.gif
你这么写就是死循环啊 n的值是不会变的呀
谁写递归用循环啊

哦,明白了,谢谢指点!

tsembrace 发表于 2013-10-5 18:07:09

小兵 发表于 2013-10-5 14:39 static/image/common/back.gif
我明白用if语句可以实现,现在我想通过while语句完成循环,但是出现了问题,所以就不知道症结在什么地方了 ...

问题多了
long factorial(int n)
{
    long p=1;   
    if(n==0)
       return p;
    do{
       p*=n;
   }while(--n>=0);
   return p;
}
页: [1]
查看完整版本: 程序不知道出了什么问题