我非常新的C所以這個問題可能是愚蠢的,但我真的不明白爲什麼一個遞歸功能給了我分段錯誤,而另一個人(只有一個參數改變),沒有給我什麼。 因此,這些函數用於計算「vette」(我的源代碼中的變量的名稱)的數量,該數字大於數組中所有其他連續數字(不包括最後一個數字)的數字。Ç - 分段故障遞歸
這是非工作之一:
#include <stdio.h>
#include <stdlib.h>
#define N 6
int vette(int *a, int len, int lentot) {
/* end of the array */
if (lentot<=1) return 0;
/* checked if the element is a vetta*/
if (len == 1) {
return 1 + vette(&a[1], lentot-1, lentot-1);
}
/* checking */
if (*a>a[len-1])
return vette(a, lentot-1, lentot); /* this line gives me seg fault */
else
return vette(&a[1], lentot-1, lentot-1);
}
/*trying the function*/
int main() {
int a[6]={10,9,4,5,7,6};
printf("%d", vette(a,N,N));
}
正如你所看到的,我使用LEN和lentot作爲指標的影響來導航到函數。但是,由於某些原因,我不明白,函數給我一個錯誤,我寫了「/ *這條線給我seg錯誤* /。
同時,更改lentot-1的變量len-1,在那一刻有相同的值,不會改變lentot的值,因爲它在參數int len,所以什麼也不應該發生,但是我的代碼開始工作完美。 這裏代碼:
#include <stdio.h>
#include <stdlib.h>
#define N 6
int vette(int *a, int len, int lentot) {
/* end of the array */
if (lentot<=1) return 0;
/* checked if the element is a vetta*/
if (len == 1) {
return 1 + vette(&a[1], lentot-1, lentot-1);
}
/* checking */
if (*a>a[len-1])
return vette(a, len-1, lentot);
else
return vette(&a[1], lentot-1, lentot-1);
}
/*trying the function*/
int main() {
int a[6]={10,9,4,5,7,6};
printf("%d", vette(a,N,N));
}
我會很感激,以理解爲什麼這個代碼是給我這個錯誤,非常感謝事先!
輸入函數時打印變量的值。這應該馬上告訴你發生了什麼事。 – dbush
@dbush非常感謝這個建議:結果是工作中的正確值,但是在非工作狀態中有一個遞歸函數的循環。 lentot總是5,而len總是6.我沒有理由爲什麼,即使在工作中,len是6,lentot在遞歸函數的一個步驟中是5! –
對不起,我是在問題開始時寫的,但如果有什麼不清楚的地方,告訴我! 「因此,這些函數用來計算」vette「(我的源代碼中的變量名)的數量,這個數字大於數組中所有其他連續數字的數字(不包括最後一個)。」所以,例如,{4,6,1,2}有1個「vette」,即6,因爲比每個連續的數字都要大。我只需要「vette」的數量! –