鱼C论坛

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

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

[复制链接]
发表于 2014-8-16 22:11:42 | 显示全部楼层 |阅读模式
1鱼币
  1. #include <stdio.h>
  2. long recursion(int n);
  3. void main()
  4. {
  5.     int n;
  6.     long result;
  7.     printf("Please input an integer number:\n");
  8.     scanf("%d",&n);
  9.     result = recursion(n);
  10.     printf("%d! = %ld",n,result);


  11. }
  12. long recursion(int n)
  13. {
  14.     long temp_result;
  15.     if (n<0)
  16.     {
  17.         printf("Sorry n<0,input error!\n");
  18.     }
  19.     else if(0 ==n || 1 == n)
  20.     {
  21.         temp_result = 1;
  22.     }
  23.     else
  24.     {
  25.         temp_result = n * recursion(n-1);
  26.     }
  27.     return temp_result;

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

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-16 22:32:24 | 显示全部楼层
递归函数内不用定义局部变量,直接返回1或者n * recursion(n-1); 就行了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 08:09:14 | 显示全部楼层
你好好看看递归函数。这个你先看一下。有什么不会的,再问!自己要相信自己。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 09:59:59 | 显示全部楼层
函数里面不能这样定义变量,直接return n或return n*recursion(n-1)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

???能贴代码吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

返回1什么意思
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我都不知道看哪页?
小甲鱼最新课程 -> https://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
小甲鱼最新课程 -> https://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);
    }

}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

这个到了n = 1;之后return 1;让后就相当于×1吗?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

我不清楚你程序要实现的功能啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 15:00:38 | 显示全部楼层
如果我没猜错的话,你想实现的是n的阶乘,这是我给你修改的代码,你可以参考一下。。。
  1. #include <stdio.h>
  2. long recursion(int n);
  3. void main()
  4. {
  5.     int n;
  6.     long result;
  7.     printf("Please input an integer number:\n");
  8.     scanf("%d",&n);
  9.     result = recursion(n);
  10.         if(result!=-1)
  11.         {
  12.                 printf("%d! = %ld\n",n,result);       
  13.         }

  14. }
  15. long recursion(int n)
  16. {
  17.     long temp_result=1;
  18.     if (n<0)
  19.     {
  20.         printf("Sorry n<0,input error!\n");
  21.                 return -1;
  22.     }
  23.         else
  24.         {
  25.                 int i;
  26.                 for(i=1;i<=n;i++)
  27.                 {
  28.                         temp_result *= i;
  29.                 }
  30.         }
  31.     return temp_result;

  32. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-17 16:13:59 | 显示全部楼层
不会C啊,只能旁观了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

求阶乘啊
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

这个好理解一点,但我想理解递归
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

递归到n=1的时候怎么退出?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-22 23:23:09 | 显示全部楼层
  1. int F(int n)
  2. {
  3.         if(n < 0){
  4.                 printf("错误,n小于0\n");
  5.                 return -1;
  6.         }
  7.         else
  8.                 return n==0?1:n*F(n-1);
  9. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-8-31 22:07:40 | 显示全部楼层
  1. long recursion(int n)
  2. {
  3.     if (0 == n || 1 == n)
  4.     {
  5.         return 1;
  6.     }
  7.     else if (n > 1)
  8.     {
  9.         return n * recursion(n - 1);
  10.     }

  11.     return 0;
  12. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-9-1 00:03:16 | 显示全部楼层
旁听生
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2014-11-29 19:44:26 | 显示全部楼层
递归函数不太会~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-18 11:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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