读书人

这个程序一直运作下去会不会让人大吃

发布时间: 2013-07-04 11:45:28 作者: rapoo

这个程序一直运行下去,会不会让人大吃一惊?


[解决办法]
哦,学习了,还要用到堆栈的问题。顺便说一句,觉得楼主会是个美女,有同意的否?

[解决办法]
妹子,鉴定完毕
[解决办法]

改成这样:

#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里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门!
递归函数关注以下几个因素
退出条件
参数有哪些
返回值是什么
局部变量有哪些
全局变量有哪些
何时输出
会不会导致堆栈溢出



读书人网 >C++

热点推荐