如何在每个if语句中正确地进行递归调用以获得更改?我特别关注"变化" variable.Thanks
TEST CASE 1 -------------------------------------------- -----------------------------------
<>> [change,flag] = makeChangeRecursive(2,100)
更改=
50
20
20
5
2
1
flag =
1
我的代码如下
function [change,flag] = makeChangeRecursive(cost,paid)
if extra > 0
flag = true;
elseif extra == 0
change = 0;
flag = true;
return
elseif cost > paid;
flag = false;
change = [];
warning('That''s not enough to buy that item.');
return
end
if extra >= 100
改变= [改变; makeChangeRecursive(cost,paid - change)];
paid =paid-100;
elseif extra >= 50
change = [change; 50];
paid =paid-50;
elseif
所有美元价值都会继续。
答案 0 :(得分:1)
让我们来看看你的第一个案例:
if extra >= 100
change = [change; makeChangeRecursive(cost,paid - change )];
paid =paid-100;
elseif ...
我们第一次调用您的函数时,变量change
中没有任何内容。事实上,它在函数调用开始时将永远不会有任何内容,因为您不将其作为参数传递或在此行之前为其赋值。因此,将change
放在作业的右侧会给您一个错误。
但那没关系,因为那不是你想做的事情。您想从头开始构建change
。
此外,change
是值列表。我们希望在更新其值后,将递归调用传递给单个值paid
。
让我们一步一步建立起来:
if extra >= 100
如果这是真的,我们希望从支付的金额中扣除100
(我们传递给递归调用的内容)并将100
添加到我们的更改列表中。我们来做第一部分:
paid = paid - 100;
正如我所说,我们首先要更新paid
,因为我们将在递归调用中使用此值,接下来会发生这种情况,并将新的更改值添加到列表中:
change = [100; makeChangeRecursive(cost, paid)];
elseif ...
等等其余的更改值。我相信你现在可以自己照顾其他人了。
我还注意到您没有为extra
分配值。这可能只是一个剪切和粘贴错误,但您需要确保在函数开头有这个错误。