这个程序一直运行下去,会不会让人大吃一惊?
[解决办法]
哦,学习了,还要用到堆栈的问题。顺便说一句,觉得楼主会是个美女,有同意的否?
[解决办法]
妹子,鉴定完毕
[解决办法]
改成这样:
#include<iostream>
using namespace std;
void funA();
void funB();
void funA(){
cout<<"A";
funB();// 调用可能会优化成跳转,也许可以实现无限循环,这可是尾递归呀!
}
void funB(){
cout<<"B";
funA();// 调用可能会优化成跳转,也许可以实现无限循环,这可是尾递归呀!
}
int main(){
funA();
}
[解决办法]
too young too navie!
I‘ll show you something really interesting:
#include <iostream>
using std::cout;
using std::endl;
void mutiply_table(int a, int b)
{
cout << a << "*" << b << "=" << a*b << "\t";
if (1==a && 1==b)
{
return;
}
else if (a>=b && b>1)
{
mutiply_table(a, b-1);
}
else
{
if (1 == b)
{
cout << endl;
}
mutiply_table(a-1, a-1);
}
}
int main(int argc, char *argv[])
{
mutiply_table(9, 9);
return 0;
}
[解决办法]
犯了“间接递归没有结束条件”的错误而已。
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
退出条件
参数有哪些
返回值是什么
局部变量有哪些
全局变量有哪些
何时输出
会不会导致堆栈溢出