含连续两次递归调用的多重递归代码输出-1的原因咨询
C递归函数输出中-1的来源解释
先看你的代码:
#include <stdio.h> int fun(int n){ if(n>=0){ printf("%d\n",n); return fun(n-1); //6 5 4 3 2 1 0 return fun(n-3); //4 3 2 1 0 -1 -2 } } int main() { printf ("%d", fun(7)); return 0; }
运行后输出:
7 6 5 4 3 2 1 0 -1
为什么会出现-1?
首先明确:前面的7到0都是fun函数内部的printf打印的,最后一行的-1是main函数里打印的fun(7)的返回值。
具体执行流程:
main调用fun(7),n=7满足n>=0,打印7后调用fun(6)- 这个递归会一直持续到
fun(0):打印0后调用fun(-1) - 当
n=-1时,不满足if(n>=0)的条件,函数执行完if块后没有任何后续语句,直接退出函数
在C语言里,对于声明为返回int类型的函数,如果没有显式写return语句返回值,函数会返回一个不确定的栈值(属于未定义行为)。在你的运行环境中,这个值恰好是-1,所以main里的printf("%d", fun(7))就把这个值打了出来。
另外提一句:代码里的return fun(n-3);是完全没用的死代码,因为前面的return fun(n-1);已经终止了函数,这行永远不会被执行。
内容的提问来源于stack exchange,提问作者Bhavna
相关产品推荐
相关产品推荐

