我如何使用递归来创建一个额外更改数组($ 100,50,20,10,5,1)MATLAB

时间:2015-09-26 02:27:38

标签: matlab recursion

如何在每个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

所有美元价值都会继续。

1 个答案:

答案 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分配值。这可能只是一个剪切和粘贴错误,但您需要确保在函数开头有这个错误。