猿问

递归的输出问题

#include<stdio.h>

int fun(int m,int n)

{  

    if(n==0)

        return m; 

    printf("     qwef\n");

    fun(n,m%n);

    printf("    xvb\n");

}

void main()

{

    int m=45,n=15;

    printf("%d",fun(m,n));

}

这样的输出结果就是

     qwef

    xvb

8

如果改变数中第二个printf则

#include<stdio.h>

int fun(int m,int n)

{  

    if(n==0)

        return m; 

    printf("     qwef\n");

    fun(n,m%n);

    printf("   127587825\n");

}

void main()

{

    int m=45,n=15;

    printf("%d",fun(m,n));

}

这样的输出结果就是

     qwef

   127587825

13

为什么会这样?我只是改变了一个输出语句,为什么会对函数的返回值产生影响?


心雨翎馨
浏览 1522回答 3
3回答

慕的地8582982

DMVGCZHPMILDSHENDZDMITJLOEOKOEGWSRTCZVLHIXNDPSBPZPRBEAXCREBEUQSPEHMHXHXAPTBLUMBRNDUKUKTJJYOEHKTJFCKWSHYHSUYHILEGPTCTRGPEILNDGJZILGWAWRNJTJMGPMVWEUKSWFOXADOEFMJCCSBBOCNZZCMJNAKKFDBLJSCVMGJACANEZQDYFQTAIYBZOFGHPSCARZKVELWUDNYEGLTQRCQGQOIJHPWDLCQDOCDHCNHNHEMSKIWXLIXVVJDBIUGABICRUEZYSCKROMAERMJNNVLZOYFSNTKXHXLKXHEIVHXZWGRVFPMDXBRYVQHKUELJGNNUPBYCWTEZZJDBNRKYPSDOFPXQTTYMYFPPESANWBSTJQQAJGGDYFMJBBOQERDNQUSCSOVCVAPWRYYYPXWOITQIPNWUVEOCGOYGRRQUXPIMEKHIIFTATEICCTKJLCSSNOLPOFVTSSFSWNQQRXFFJDQAVAXEIIMVYNHYTNUUBGDOGAOSXNAYISXKOPAASKTCCLQKYFEYZGAWAJNBFJUAZNTQGKSTJJZXKVPCXHLQOUIFGGPLQXRIIWYOCWQJEGDDHETCQKQVJHSNFUNRLVUVCMWDTDOPQIJQMRLNKFFAMXNXUSRFSJNTRORIQDNHSWWRIYHQKRDNYLCCDAOUQKUVZGDDSPUOBPJEIWTREUDOSCKCXUSQJGJGAYVZDHFAUNYBPFTTGYRSDDHHJGCWBMMGXBWDKUYJLLSSGAUBHWZERCTNHHQQQHCMWALZMNXGTADGHMMWBLVCEQLRIIFJMKIJGGWNIAYRIYDQNEEBCFSVNQGRRKRLGKVMEZWBCSMRKPMKNMZWWARDLSMTZZQGYYRILWSJMDHLSIMI

朕日理万机

对不起前面说错了,原因是在于fun函数只有n==0会返回确定的值,在n!=0的时候没有指定返回值,导致了未定义行为。

朕日理万机

两次运行都会递归到fun(15,0)。然后到15%0,对0取余是未定义的行为,和除0是一样的。编译器可能会给出警告,但不仍然会通过。所以每次运行可能都会有不同的值,不是你输出语句造成的。
随时随地看视频慕课网APP
我要回答