2014-07-20 125 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