zoukankan      html  css  js  c++  java
  • 6-1 爆内存函数实例 (6 分)

    本题要求实现一个递归函数,用户传入非负整型参数n,用户依次输出1到n之间的整数。所谓递归函数就是指自己调用自己的函数。

    说明:
    (1)递归函数求解问题的基本思想是把一个大规模问题的求解归结为一个相对较小规模问题的求解,
    小规模归结为小小规模,以此类推,直至问题规模小至边界(边界问题可直接求解)。递归函数由两
    部分组成,一部分为递归边界,另一部分为递归关系式。以求阶乘函数为例,递归边界Factorial(1)=1;
      递归公式: Factorial(n)=n*Factorial(n-1),它对应的递归函数如下:
                       int GetFactorial(int n){
                                  int result;
                                  if(n==1) result = 1;    //递归边界,此时问题答案易知,可直接求解
                                  else result =n* GetFactorial(n-1);   //递归关系,大问题求解归结为小问题求解
                                  return result;
                       }
    
    (2) 发生函数递归调用(自己调用自己)或者普通函数调用时,系统需要保存调用发生前的执行场景信
    息(包括调用发生前的各个变量取值信息以及函数执行位置等),以便被调函数执行完毕后可以顺利返
    回并继续执行后续操作。每次调用都需要保存一个场景信息,保存这些场景信息需要的辅助空间的大小
    与函数调用的次数呈正比,或者说其空间复杂度是O(n),当中n为调用次数。
    
    (3)本例的目的是让学生编写一个递归函数,并在自己的机器上测试递归调用次数达到多少时会发生内存
    被爆而出现内存溢出的错误(我办公室机器上设置参数为66000时会溢出)。同样的这个问题,如果不
    用递归函数而改用普通的循环语句解决问题,则不会出现内存溢出!
    

    函数接口定义:

    void PrintN (long n);
    

      

    其中n为用户传入的参数。

    裁判测试程序样例:

    在这里给出函数被调用进行测试的例子。例如:
    #include <stdio.h>
    void PrintN(long n);
    
    int main()
    {
        PrintN(66000L);
        return 0;
    }
    
    /* 请在这里填写答案 */
    

      

    输入样例:

    5
    

      

    输出样例:

    12345
    

      

    void PrintN(long n)
    {
        if( n == 1 )
            printf("1");
        else
        {
            PrintN(n-1);
            printf("%d", n);
        }
    }
    

      

    作者:7oDo

    仅供参考,请勿抄袭。

    Hang Hang Hang !!!

  • 相关阅读:
    php递归无限分类、根据子类获取所有顶类
    PHP+Redis 有序集合实现 24 小时排行榜实时更新
    php操作redis常用方法代码示例
    Mysql 数据库默认值选 ''" 、Null和Empty String的区别
    linux查看端口占用情况
    php获取微信openid
    phpstorm 删除空行
    git常用操作命令归纳
    Redis数据类型
    渴求式加载指定字段、加载多个关联关系、嵌套的渴求式加载、带条件约束的渴求式加载
  • 原文地址:https://www.cnblogs.com/Jie-Fei/p/9648581.html
Copyright © 2011-2022 走看看