楼主:
dzwei (Cout<< *p << \n ;)
2023-02-14 22:42:50※ 引述《utomaya (乌托马雅)》之铭言:
: 一个在程式语言界有名的人说了一句话:“递回只在天上有,凡人应该用循环”
: 可能对方是名人,大家都奉为圭臬
: 我一点都不同意
: 举个简单例子好了
: 一个阵列a[]取任意3个,用循环怎么写?
: for(int i=0;i<a.size();i++)
: {
: for(j=i+1;j<a.size();j++)
: {
: for(k=j+1;k<a.size();k++)
: {
: //.....
: //以下做特殊处理
: }
: }
: }
这是保守、安全的写法
请不要小看它
并且多了解
编译器的最佳化
也不要小看编译器最佳化
因为他能帮你优化这个"有限循环"
原PO说的递归
的确是可以简化程式不少
让我想到刷提二元树反转的时候
这个很好用
参考:
https://tinyurl.com/2p89ndhx
拉回正题 刷提/考试好用
但实际上?
以原PO上一篇说的 当例子
: void recur(int tl, int level, int start)
: {
: if(level==0)
: {
: //以下做特殊处理
: // ......
: return;
: }
: for(int i=start;i<a[].size();i++)
: {
: recur(tl,level-1,i+1);
: }
: }
: 在最后一层干掉就好
: 我在ProjectEuler很常用到这种递回
我们调用它
int main()
{
recur(随便数字, 狗干大的数字, 随便数字);
}
你编译通过了
一些机器执行
却跑出
https://zh.wikipedia.org/wiki/Stack_Overflow
没错
鼎鼎大名的stackoverflow
名称就是这样来的
你在stackoverflow
还是能找到不少关于
递归造成stackoverflow的例子
总之
递归慎用
特别是要递归很多次
并且你的函式偏复杂