递归重温了-我的代码:

18视图(30天)
Bibek女子
Bibek女子 2022年10月24日
编辑: Bibek女子2022年10月28日
我指定的代码 递归的重新审视 不工作对大型向量。你能解释我为什么不工作尽管我试图减少递归函数调用的数量。
函数w =逆转(v)
如果长度(v) < = 1
w = v;
其他的
f = v (1);
l = v(结束);
vv = v (2: end-1);
w = [l逆转(vv) f];
结束
结束

答案(1)

约翰D 'Errico
约翰D 'Errico 2022年10月24日
编辑:约翰D 'Errico 2022年10月24日
你的代码是可接受工作。当然,如果你称它为一个向量的长度1 e6,或类似的东西,你可以获得数以百万计的递归调用。这将打击你的记忆。为什么你会感到惊讶吗?本质上你的代码使用N / 2递归调用一个向量的长度N(当然取决于如果N是奇数或偶数)。
递归解决问题往往是不错,感觉他们很容易写,他们只是看起来整洁。嘿,太好了。但这并不意味着所有的递归问题解决方案是有效的实现。事实上,你经常最终交易需要大量的内存,优雅的外观。
1评论
Bibek女子
Bibek女子 2022年10月28日
编辑:Bibek女子 2022年10月28日
非常感谢你的解释。
但是,我想问你一件事在我脑海中关于这个任务的解决方案。我希望你能帮助我明确我的困惑。
我得到了下面的解决方案这个任务工作好大的向量。
函数v =逆转(v)
如果长度(v) > 1
i =装天花板(长度(v) / 2);
v =[逆转(v (i + 1:结束)逆转(v(1:我)));
结束
但是,不是吗,相同长度的向量v,递归调用这个代码的数量是高于我的代码?。
是因为虽然递归调用的数量较高,向量的长度为每个连续的递归调用是减少得更快?这是制造差异的原因还是有什么别的吗?
提前谢谢你。

登录置评。

2022世界杯八强谁会赢?


释放

R2021a

世界杯预选赛小组名单社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!世界杯预选赛小组名单

开始狩猎!

Baidu
map