鱼C论坛

 找回密码
 立即注册
查看: 2505|回复: 20

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

[复制链接]
发表于 2014-8-16 22:11:42 | 显示全部楼层 |阅读模式
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?????????

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-16 22:32:24 | 显示全部楼层
递归函数内不用定义局部变量,直接返回1或者n * recursion(n-1); 就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 08:09:14 | 显示全部楼层
你好好看看递归函数。这个你先看一下。有什么不会的,再问!自己要相信自己。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 09:59:59 | 显示全部楼层
函数里面不能这样定义变量,直接return n或return n*recursion(n-1)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-17 13:49:35 | 显示全部楼层
Beyond@ 发表于 2014-8-17 09:59
函数里面不能这样定义变量,直接return n或return n*recursion(n-1)

???能贴代码吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

返回1什么意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我都不知道看哪页?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-17 13:52:12 | 显示全部楼层
Beyond@ 发表于 2014-8-17 09:59
函数里面不能这样定义变量,直接return n或return n*recursion(n-1)

我问的是N=1;之后怎么×1和返回为什么是6,不是1
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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
    {
        return  n * recursion(n-1);
    }

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-17 14:32:05 | 显示全部楼层
Beyond@ 发表于 2014-8-17 13:59
看看是不是这样
long recursion(int n)
{

这个到了n = 1;之后return 1;让后就相当于×1吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 14:47:41 | 显示全部楼层
雨水 发表于 2014-8-17 14:32
这个到了n = 1;之后return 1;让后就相当于×1吗?

我不清楚你程序要实现的功能啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;

}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 16:13:59 | 显示全部楼层
不会C啊,只能旁观了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-18 19:36:14 | 显示全部楼层
Beyond@ 发表于 2014-8-17 14:47
我不清楚你程序要实现的功能啊

求阶乘啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-8-18 19:38:36 | 显示全部楼层
一个人在战斗 发表于 2014-8-17 15:00
如果我没猜错的话,你想实现的是n的阶乘,这是我给你修改的代码,你可以参考一下。。。

这个好理解一点,但我想理解递归
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

递归到n=1的时候怎么退出?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 00:03:16 | 显示全部楼层
旁听生
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-11-29 19:44:26 | 显示全部楼层
递归函数不太会~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-18 13:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表