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);
    }
}

  

原文地址:https://www.cnblogs.com/Jie-Fei/p/9648581.html

时间: 09-14

6-1 爆内存函数实例 (6 分)的相关文章

C/C++ char a[ ] 和 char *a 的差别,改变 char *a爆内存错误的原因

对于一些需要传入参数为 char * temp 指针类的函数: 我们定义一个 char a[10] 或char *a 传进去都是可以的. 但是, 如果该函数是会改变你所传入的参数的值时, 传入 char *a 将爆内存错误,而 char a[10] 却不会. 例如:下面中的 strtok.strcpy.strcat 如果第一个参数传入的是 char *a 指针类型,都是会引起爆内存错的 我例子中没使用 char * 原因: 指针类型 * 它是没被分配地址空间的,定义了就是一个指针常量,常量去改变

Java内存溢出实例总结

java虚拟机规范规定的java虚拟机内存其实就是java虚拟机运行时数据区,其架构如下: <img width="492" height="325" src="file:///C:/Users/zpy/AppData/Local/Temp/msohtml1/01/clip_image001.jpg" <="" span="">' v:shapes="_x0000_i1029&q

【转】Linux共享内存编程实例

原文地址:http://blog.csdn.net/pcliuguangtao/article/details/6526119 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 6

linux awk 内置函数实例

awk内置函数,主要分4种:算数函数.字符串函数.时间函数.一般函数 一.算术函数 以下算术函数执行与 C 语言中名称相同的子例程相同的操作: 函数名 说明 atan2( y, x ) 返回 y/x 的反正切. cos( x ) 返回 x 的余弦:x 是弧度. sin( x ) 返回 x 的正弦:x 是弧度. exp( x ) 返回 x 幂函数. log( x ) 返回 x 的自然对数. sqrt( x ) 返回 x 平方根. int( x ) 返回 x 的截断至整数的值. rand( ) 返回

Spark 1.x 爆内存相关问题汇总及解

Spark 1.x 爆内存相关问题汇总及解决 OOM java.lang.OutOfMemoryError # on yarn org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl - Container [<edited>] is running beyond physical memory limits. Current usage: 18.0 GB of 18 GB

Block内存管理实例分析

在ios开发中,相信说道block大家都不陌生,内存管理问题也是开发者最头疼的问题,网上很多讲block的博客,但大都是理论性多点,今天结合一些实例来讲解下. 存储域 首先和大家聊聊block的存储域,根据block在内存中的位置,block被分为三种类型: NSGlobalBlock NSStackBlock NSMallocBlock 从字面意思上大家也可以看出来 NSGlobalBlock是位于全局区的block,它是设置在程序的数据区域(.data区)中. NSStackBlock是位于

C语言数组和函数实例练习

C语言的数组和函数部分的知识,在语法上和Java语法是有所相似的,这里只通过实例总结一些自己感觉需要理解的部分知识. 1.数组 数组中的元素具有相同的数据类型:数组一旦创建,不能被改变:数组中元素在内存中是连续依次存在的:使用时需要随时注意下标越界的问题. 例1:输入数量不确定的[0,9]范围内的整数,统计每个数字出现的次数,输入-1时结束程序. #include <stdio.h> #include <stdlib.h> int main() { int i; int num[1

php 数组函数实例

数组的概念 数组(array)是 PHP 中一个非常重要的概念,我们可以把数组看做一系列类似的数据的集合,实际上数组是一个有序图. PHP 还提供了超过 70 个内建函数来操作数组. 由于数组在php中比较重要,并且不易掌握,本节将使用实例进行一一讲解. PHP 数组基本操作 PHP print_r 与 var_dump 输出数组 PHP is_array() 检测变量是否是数组 PHP 数组遍历 foreach 语法结构 PHP 数组之count 函数 PHP 检查数组中是否存在某个值 in_

php返回json数据函数实例_php技巧_脚本之家

本文实例讲述了php返回json数据函数的用法,分享给大家供大家参考.具体方法如下: json_encode()函数用法: echo json_encode(array('a'=>'bbbb','c'=>'ddddd'); 这样就会生成一个标准的json格式的数据 <?php //需要执行的SQL语句 //单条 $sql="select id,name from tbl_user where id=1"; //多条数据 //$sql="select id,n

memcpy() -- 拷贝内存函数

定义函数: void *memcpy(void *dest, const void *src, size_t n)函数说明: memcpy()用来拷贝src所指的内存内容前n个字节到dest所指的内存地址上.与strcpy()不同的是,memcpy()会完整的复制n个字节,不会因为遇到字符串结束'\0'而结束返回值:   返回指向dest的指针附加说明:指针src和dest所指的内存区域不可重叠---------------------------------------------------