2014-07-20 123 views
0

如何將值1傳遞給main函數中的if語句以及返回函數如何與遞歸調用一起使用?返回函數如何返回If語句的值?

#include <stdio.h> 
#include <stdlib.h> 
int identicalTrees(struct node* a, struct node* b) 
    { 
if (a==NULL && b==NULL) 
    return 1; 

if (a!=NULL && b!=NULL) 
{ 
    return 
    (
     a->data == b->data && 
     identicalTrees(a->left, b->left) && 
     identicalTrees(a->right, b->right) 
    ); 
} 

return 0; 
} 




int main() 
{ 
if(identicalTrees(root1, root2)) 
    printf("Both tree are identical."); 
else 
    printf("Trees are not identical."); 

getchar(); 
return 0; 
} 
+1

什麼「返回功能」? 'return'不是一個函數,它是一個聲明。並且它返回一個值給調用者,因爲語言定義是這樣說的。 –

+0

有幾個很棒的視頻解釋了遞歸和堆棧如何在YouTube上的Computerphile頻道上工作。你應該全部看着他們。 https://www.youtube.com/watch?v=Mv9NEXX1VHc,https://www.youtube.com/watch?v=TrfcJCulsF4,https://www.youtube.com/watch?v=7t_pTlH9HwA,https: //www.youtube.com/watch?v=7ha78yWRDlE,https://www.youtube.com/watch?v=S_NXz7I5dQc – SpiderPig

+1

您一定要閱讀[call stack](https://en.wikipedia。組織/維基/ CALL_STACK)。 –

回答

4

當已經聲明爲返回值的方法被調用時,空間被堆疊爲返回值上的每個調用該方法時保留的。 返回語句將該值放在堆棧中的該位置,並退出返回調用該方法的代碼的方法。調用該方法的代碼通過返回語句檢索放在堆棧上的值,並在如果語句中使用它。

在遞歸中,對方法的每次連續調用都將自己的本地堆棧變量空間添加到堆棧頂部。當一個方法執行時,當前堆棧指針的頂端減少到「釋放」該方法的堆棧空間。

有關更詳細的解釋,請參閱http://en.wikipedia.org/wiki/Stack-oriented_programming_languagehttp://en.wikipedia.org/wiki/Recursion_(computer_science)https://www.cs.umd.edu/class/fall2002/cmsc214/Tutorial/recursion2.html

+0

謝謝你邁克.. – user3815757

+2

這是一種做事的方式。通過寄存器返回可能更常見。 –

+0

@ user3815757另請參閱[Wikipedia:Calling convention](http://en.wikipedia.org/wiki/Calling_convention)及其鏈接的頁面,例如cdecl章節中的[Wikipedia:x86調用約定](http://en.wikipedia.org/wiki/X86_calling_conventions)說:「整數值和存儲器地址在EAX寄存器中返回,ST0 x87寄存器中的浮點值..「_ – xmojmr