递归就是函数调用本身,来解决子问题,通过子问题的解构造本问题的解。
递归可以用于简化程序,让程序结构明了。。
调用者与被调用者之间有以下的四种数据传递关系:
1>没有任何数据传递
e.g. 打印链表
void PrintList(ListNode const *list)
{
if(list == NULL) return; //exit
cout << list->val << " ";
PrintList(list->next);
}
2> 调用者 <= === 被调用者
这是我们通常习惯的数据传递(通过解决子问题,来解决本问题)
e.g. 计算阶乘
int f(int n)
{
if(n == 0 || n == 1) return 1;
return n * f(n-1);
}
3> 调用者 = ===> 被调用者
其实我们从小学的数的加法运算就可以认为是这种情况。
115 + 126 = 241
低位运算结果(5+6=11)有进位,需要传递给被调用者
4&