C语言奇偶判断递归函数出现Segmentation fault报错原因求解
段错误原因
你的递归函数posneg没有设置任何终止条件,每次调用都会直接触发下一层posneg(n-1)调用,参数会不断从你输入的正整数往负数方向无限递减,递归调用栈的深度会持续增加,直到超出操作系统给进程分配的栈空间上限,触发栈溢出,最终表现就是Segmentation fault。
除此之外,你当前的递归逻辑也无法实现奇偶判断的需求,哪怕解决了段错误也得不到正确结果。
修复后的代码
按照递归判断奇偶的逻辑,只需要补充终止边界、调整返回逻辑即可:
#include <stdio.h> int posneg(int n){ // 递归终止条件:0是偶数,直接返回1(对应偶数判断结果) if(n == 0){ return 1; } // n的奇偶性和n-1相反,直接取反即可 return !posneg(n-1); } int main () { int num; do{ printf("Provide a number: "); scanf("%d",&num); } while (num <= 0); if (posneg(num) == 1) printf("The number is even\n"); else printf("The number is odd\n"); return 0; }
内容的提问来源于stack exchange,提问作者el_noobito
相关产品推荐
相关产品推荐

