這段代碼中的!*s的意思是與*s相反嗎?
f函數是什麼原理?
還有就是為什麼最後輸出的只有一串nahginrek.
而不是有很多串?難道不是每遞歸一次就輸出一次?
求大神解答。
代碼:
#include
void f( char *s )
{
if( !*s ) {
return;
}
f( s+1 );
putchar( *s );
}
int main(void)
{
f("kernighan");
putchar('\n');
return 0;
}
if( !*s )
{
return;
}
這是用來判斷字符串結束的,
當程序執行到
f( s+1 );時,會執行遞歸調用,但這時候putchar是不執行的,等到形參S指針增加到'n'時,再次調用f(s+1),就會return出去,這時候putchar就會執行,
輸出了字符n,此時,這次的調用也得以執行完畢,按照遞歸的反順序,依次得以輸出字符,所以會輸出一個反順序的字符串。