码迷,mamicode.com
首页 > 其他好文 > 详细

递归 段错误 习题

时间:2019-04-26 00:02:07      阅读:179      评论:0      收藏:0      [点我收藏+]

标签:条件   scan   不能   指定   ati   赋值   存在   参数传递   \n   

段错误

  1. 递归里面算阶乘 f(10000000)没有输出,使用gdb 显示 SIGSEGV--段错误
  2. 编译后产生的可执行文件里面保存着什么?
    1. UNIX/Linux 用 ELF
    2. DOS下用COFF
    3. Windows用PE(COFF扩充而得)
  3. 段(segmentation)
    1. 二进制文件内的区域。
    2. 可用size程序得到可执行文件中的各个段的大小
    3. Text Segment--正文段--储存指令
    4. Data Segment--数据段--储存已初始化的变量
    5. BSS Segment--BSS段--未赋值的全局变量
    1. 栈不储存在可执行文件内,而是在运行时创建
    2. 调用栈所在的段成为Stack Segment
    3. 和其他段一样,不能越界访问,否则会stack overflow
    4. 调用栈保存函数的调用关系和局部变量
    5. 栈空间的大小
      1. linux 通过ulimit修改 ulimit -a显示当前栈的大小, ulimit -s 32768 把栈大小指定为32MB
      2. windows 用gcc指定执行文件的栈大小,-Wl,--stack=<byte count>
    6. 局部变量也是放在堆栈段中,栈溢出不一定是因为递归调用太多次,可能是局部变量太大。因此建议“把较大的数组放在main函数外。

竞赛题目

  1. 刽子手游戏
    1. 看输入字符和给定字符关系
    2. 使用全局变量可便于维护内容,可以免去过多的参数传递。
    3. 猜过的字母再猜一次算错:将猜过的字母从答案内“删去”(改成不可能满足为答案的条件的数据)
  2. 救济金发放
    1. 一圈官员,两个官员逆时,顺时针数k, m个数,停下,被选中的离开队伍(可能是同一个人)
    2. #include<stdio.h>
      #define maxn 25
      int n,k,m,a[maxn];
      //逆时针走t步,步长为d 返回新位置
      int go(int p,int d,int t)
      {
          while(t--)
          {
              do
              {    
                  //前面减去1??? 
                  p=(p+d+n-1)%n+1;        //注意这里经过的数字是步数加一! 因此会有最后的+1; 
              }
              while(a[p]==0);
          }
          return p;
       } 
       int main()
       {
           while(scanf("%d%d%d",&n,&k,&m))
           {
               for(int i=1;i<=n;i++) a[i]=i;
               int left=n;
               int p1=n,p2=1;
               while(left)
               {
                   p1=go(p1,1,k);
                  p2=go(p2,-1,m);
                  printf("%3d",p1);left--;
                  if(p2!=p1)
                  {
                      printf("%3d",p2);
                      left--;
                  }
                  a[p1]=a[p2]=0;
                  if(left)
                  printf(",");
               }
               printf("\n");
           }
           return 0;
       }
  3. 信息解码
    1. 01字符串,长度会逐渐增加,且不存在全1的串。 编写一个解码程序,输入一个编码头,则序列的每个串对应一个字符。再编码文本。每个小结前三个数字表示编码长度,每小节以全1结束,编码以000结束。

递归 段错误 习题

标签:条件   scan   不能   指定   ati   赋值   存在   参数传递   \n   

原文地址:https://www.cnblogs.com/xuwanwei/p/10753888.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!