查看: 4862|回复: 5

各位咱们讨论一下递归吧!

[复制链接]
  • TA的每日心情
    奋斗
    2016-11-5 20:47
  • 签到天数: 18 天

    [LV.4]偶尔看看III

    发表于 2016-11-5 22:29:48 | 显示全部楼层 |阅读模式
    #include"stdio.h"
    #include"iostream"
    using namespace std;
    #define  n 4
    long factorial(long  x)
    {               
            if (x == 0) return 1;        //结束递归
            else return x*factorial(x - 1) ;
    }
    int main()
    {
            long a;
            a=factorial(n);
            cout << n<<"的阶乘为"<<a<<endl;
    }
    /*
    int _tmain(int argc, _TCHAR* argv[])
    {
            int sum2 = 0;
            for (int i = 1; i <=n; i++)
            {
                    int sum = 1;
                    for (int j = 1; j <= i; j++)
                    {
                            sum = sum*j;
                    }
                    sum2 = sum2 + sum;
                   
            }
            cout << sum2<<endl;
            return 0;
    }
    */上面是求n!;
    下面是求 1!+2!+3!....+n!
    可不可以把下面的利用递归实现啊
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2016-11-5 20:47
  • 签到天数: 18 天

    [LV.4]偶尔看看III

     楼主| 发表于 2016-11-5 22:30:44 | 显示全部楼层
    求指教。
    回复

    使用道具 举报

  • TA的每日心情

    2020-3-29 08:03
  • 签到天数: 255 天

    [LV.8]以坛为家I

    发表于 2016-11-6 09:09:33 | 显示全部楼层
    表示看不懂!!!!!
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    擦汗
    2019-10-17 06:41
  • 签到天数: 182 天

    [LV.7]常住居民III

    发表于 2016-11-6 11:24:49 | 显示全部楼层
    口以的,但是目测n大的话会很卡,能不用递归就不用递归,速度很慢的,除非你没其他思路了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    郁闷
    2017-3-9 08:40
  • 签到天数: 108 天

    [LV.6]常住居民II

    发表于 2016-11-6 20:48:08 | 显示全部楼层

    RE: 各位咱们讨论一下递归吧!

    本帖最后由 ttl255 于 2016-11-6 22:30 编辑

    作业题?

    为啥都用C++了 还用C的代码风格
    我就过来划水的
    笑笑就好

    [C++] 纯文本查看 复制代码
    #include <iostream>
    
    int factorial(int n);
    
    int main() 
    {
    	int n, sum = 0;
    	while ( std::cin >> n) 
    	{
    		for (int i = 1; i <= n; i++) 
    		{
    			sum += factorial(i);
    		}
    		 std::cout << sum <<  std::endl;
    	}
    	return 0;
    }
    
    
    int factorial(int n)
    {
    	if (n > 1) 
    	{
    		return n * factorial(n - 1);
    	}
    	else
    	{
    		return n;
    	}
    }
    
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    无聊
    2022-11-4 00:00
  • 签到天数: 325 天

    [LV.8]以坛为家I

    发表于 2016-11-7 13:17:56 | 显示全部楼层
    [C] 纯文本查看 复制代码
    
    思路,递归进行时暗含了循环,循环条件是 if (x == 0)并返回1作为结束。
    这个1返回去,就是当前循环的结果。
    
    当4进入时
    long factorial(long  4)
    {                
            if (x == 0) return 1;        //结束递归
            else return 4*factorial(4 - 1) ;
    }
    得到:factorial(3) 
    long factorial(long  3)
    {                
            if (x == 0) return 1;        //结束递归
            else return3*factorial(3 - 1) ;
    }
    得到:factorial(2) 
    long factorial(long  2)
    {                
            if (x == 0) return 1;        //结束递归
            else return 2*factorial(2 - 1) ;
    }
    得到:factorial(1) 
    long factorial(long  1)
    {                
            if (x == 0) return 1;        //结束递归
            else return 1*factorial(1 - 1) ;
    }
    
    得到:factorial(0) 
    long factorial(long  0)
    {                
            if (x == 0) return 1;        //结束递归
            else return 1*factorial(1 - 1) ;
    }
    
    
    从后面看起,
    long factorial(long  0)结果是 1;
    long factorial(long  1)结果是 :1*factorial(1 - 1)  = 1*1 ;
    long factorial(long  2) )结果是 :2*factorial(2 - 1) = 2*1 ;
    ….
    ….
    
    int _tmain(int argc, _TCHAR* argv[])
    {
            int sum2 = 0;
            for (int i = 1; i <=4; i++)
            {
                    int sum = 1;
                    for (int j = 1; j <= i; j++)
                    {
                            sum = sum*j;
                    }
                    sum2 = sum2 + sum;
                    
            }
            cout << sum2<<endl;
            return 0;
    }
    
    可以不用按他的模板做。
     1!+2!+3!....+n!  可以设置n每次 n-- 依次减一;
    使用递归(按上面的递归方式,)
    直到n = 1时。返回1
    返回去的1+前面的2 (return 1*factorial(1 - 1)改return 1 +factorial(*)) ;
    这样就实现n!
    )
    说到这里。应该想的出来了,代码不写了。
    
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    指导单位

    江苏省公安厅

    江苏省通信管理局

    浙江省台州刑侦支队

    DEFCON GROUP 86025

    旗下站点

    邮箱系统

    应急响应中心

    红盟安全

    联系我们

    官方QQ群:112851260

    官方邮箱:security#ihonker.org(#改成@)

    官方核心成员

    Archiver|手机版|小黑屋| ( 苏ICP备2021031567号 )

    GMT+8, 2024-12-26 15:42 , Processed in 0.017954 second(s), 10 queries , Gzip On, MemCache On.

    Powered by ihonker.com

    Copyright © 2015-现在.

  • 返回顶部