雨水 发表于 2014-8-16 22:11:42

最后一步到n=1然后怎么解

#include <stdio.h>
long recursion(int n);
void main()
{
    int n;
    long result;
    printf("Please input an integer number:\n");
    scanf("%d",&n);
    result = recursion(n);
    printf("%d! = %ld",n,result);


}
long recursion(int n)
{
    long temp_result;
    if (n<0)
    {
      printf("Sorry n<0,input error!\n");
    }
    else if(0 ==n || 1 == n)
    {
      temp_result = 1;
    }
    else
    {
      temp_result = n * recursion(n-1);
    }
    return temp_result;

}当 N=1的时候temp_result = 1;然后程序怎么走,return 语句为什么是返回6?????????

川本姨夫 发表于 2014-8-16 22:32:24

递归函数内不用定义局部变量,直接返回1或者n * recursion(n-1); 就行了

流行语 发表于 2014-8-17 08:09:14

你好好看看递归函数。这个你先看一下。有什么不会的,再问!自己要相信自己。

Beyond@ 发表于 2014-8-17 09:59:59

函数里面不能这样定义变量,直接return n或return n*recursion(n-1)

雨水 发表于 2014-8-17 13:49:35

Beyond@ 发表于 2014-8-17 09:59
函数里面不能这样定义变量,直接return n或return n*recursion(n-1)

???能贴代码吗?

雨水 发表于 2014-8-17 13:50:33

川本姨夫 发表于 2014-8-16 22:32
递归函数内不用定义局部变量,直接返回1或者n * recursion(n-1); 就行了

返回1什么意思

雨水 发表于 2014-8-17 13:51:09

流行语 发表于 2014-8-17 08:09
你好好看看递归函数。这个你先看一下。有什么不会的,再问!自己要相信自己。

我都不知道看哪页?

雨水 发表于 2014-8-17 13:52:12

Beyond@ 发表于 2014-8-17 09:59
函数里面不能这样定义变量,直接return n或return n*recursion(n-1)

我问的是N=1;之后怎么×1和返回为什么是6,不是1

Beyond@ 发表于 2014-8-17 13:59:36

雨水 发表于 2014-8-17 13:49
???能贴代码吗?

看看是不是这样
long recursion(int n)
{
    if (n<0)
    {
      printf("Sorry n<0,input error!\n");
    }
    else if(0 ==n || 1 == n)
    {
      return n;
    }
    else
    {
      returnn * recursion(n-1);
    }

}

雨水 发表于 2014-8-17 14:32:05

Beyond@ 发表于 2014-8-17 13:59
看看是不是这样
long recursion(int n)
{


这个到了n = 1;之后return 1;让后就相当于×1吗?

Beyond@ 发表于 2014-8-17 14:47:41

雨水 发表于 2014-8-17 14:32
这个到了n = 1;之后return 1;让后就相当于×1吗?

我不清楚你程序要实现的功能啊

一个人在战斗 发表于 2014-8-17 15:00:38

如果我没猜错的话,你想实现的是n的阶乘,这是我给你修改的代码,你可以参考一下。。。
#include <stdio.h>
long recursion(int n);
void main()
{
    int n;
    long result;
    printf("Please input an integer number:\n");
    scanf("%d",&n);
    result = recursion(n);
        if(result!=-1)
        {
                printf("%d! = %ld\n",n,result);       
        }

}
long recursion(int n)
{
    long temp_result=1;
    if (n<0)
    {
      printf("Sorry n<0,input error!\n");
                return -1;
    }
        else
        {
                int i;
                for(i=1;i<=n;i++)
                {
                        temp_result *= i;
                }
        }
    return temp_result;

}

gyixue 发表于 2014-8-17 16:13:59

不会C啊,只能旁观了

雨水 发表于 2014-8-18 19:36:14

Beyond@ 发表于 2014-8-17 14:47
我不清楚你程序要实现的功能啊

求阶乘啊

雨水 发表于 2014-8-18 19:38:36

一个人在战斗 发表于 2014-8-17 15:00
如果我没猜错的话,你想实现的是n的阶乘,这是我给你修改的代码,你可以参考一下。。。

这个好理解一点,但我想理解递归

雨水 发表于 2014-8-18 19:39:44

川本姨夫 发表于 2014-8-16 22:32
递归函数内不用定义局部变量,直接返回1或者n * recursion(n-1); 就行了

递归到n=1的时候怎么退出?

my_angel 发表于 2014-8-22 23:23:09

int F(int n)
{
        if(n < 0){
                printf("错误,n小于0\n");
                return -1;
        }
        else
                return n==0?1:n*F(n-1);
}

风之残月 发表于 2014-8-31 22:07:40

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

    return 0;
}

低调哥 发表于 2014-9-1 00:03:16

旁听生

735899422 发表于 2014-11-29 19:44:26

递归函数不太会~
页: [1] 2
查看完整版本: 最后一步到n=1然后怎么解