我非常新的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”的数量! –