生活随笔
收集整理的這篇文章主要介紹了
递归 段错误 习题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
段錯誤
遞歸里面算階乘 f(10000000)沒有輸出,使用gdb 顯示 SIGSEGV--段錯誤編譯后產生的可執行文件里面保存著什么?UNIX/Linux 用 ELFDOS下用COFFWindows用PE(COFF擴充而得)段(segmentation)二進制文件內的區域。可用size程序得到可執行文件中的各個段的大小Text Segment--正文段--儲存指令Data Segment--數據段--儲存已初始化的變量BSS Segment--BSS段--未賦值的全局變量棧棧不儲存在可執行文件內,而是在運行時創建調用棧所在的段成為Stack Segment和其他段一樣,不能越界訪問,否則會stack overflow調用棧保存函數的調用關系和局部變量??臻g的大小linux 通過ulimit修改 ulimit -a顯示當前棧的大小, ulimit -s 32768 把棧大小指定為32MBwindows 用gcc指定執行文件的棧大小,-Wl,--stack=<byte count>局部變量也是放在堆棧段中,棧溢出不一定是因為遞歸調用太多次,可能是局部變量太大。因此建議“把較大的數組放在main函數外。競賽題目
劊子手游戲看輸入字符和給定字符關系使用全局變量可便于維護內容,可以免去過多的參數傳遞。猜過的字母再猜一次算錯:將猜過的字母從答案內“刪去”(改成不可能滿足為答案的條件的數據)救濟金發放一圈官員,兩個官員逆時,順時針數k, m個數,停下,被選中的離開隊伍(可能是同一個人) #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;} 信息解碼01字符串,長度會逐漸增加,且不存在全1的串。 編寫一個解碼程序,輸入一個編碼頭,則序列的每個串對應一個字符。再編碼文本。每個小結前三個數字表示編碼長度,每小節以全1結束,編碼以000結束。
轉載于:https://www.cnblogs.com/xuwanwei/p/10753888.html
總結
以上是生活随笔為你收集整理的递归 段错误 习题的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。