フィルターのクリア

Could someone explain how this code works?

1 回表示 (過去 30 日間)
David
David 2013 年 10 月 10 日
コメント済み: Cedric 2013 年 10 月 12 日
So, we were given this as an example of recursion. It's a program that computes the factorial of a given scalar.
function f = factorial(x)
temp = 0;
if (x == 1)
temp = 1;
else
temp = x*factorial(x-1);
end
I get that x is inputted and if it's value is 0, then it returns 1 right off the bat. However, if x is not equal to 1 then the operation temp = x * factorial(x - 1); is carried out. So, x - 1 is then passed to factorial(), this is where I'm lost. What happens now? How does the value of temp not end up as 0, seeing as it's reset to that at the beginning of the function? Also, how does the code know when to stop and return the result?
f = temp;

採用された回答

Cedric
Cedric 2013 年 10 月 10 日
編集済み: Cedric 2013 年 10 月 11 日
The line
temp = 0 ;
is useless, and the temp which appear afterwards should be f, the output argument.
Hint: consider all "instances" of the factorial function as different, and draw a schematics, e.g.
x = factorial(3)
-> factorial, x=3 [1st instance]
| ..
| else
| f = x * factorial(3-1)
| -> factorial, x=2 [2nd instance]
| | ..
| | else
| | f = x * factorial(2-1)
| | -> factorial, x=1 [3rd in.]
| | | if x == 1
| | | f = 1 ;
| | <-
| | so f = 2 * 1
| <-
| so f = 3 * 2
so x = 6
EDIT: I just realized that there was a typo that you spotted!
This was not
factorial(3 - 2)
but
factorial(3 - 1)
Thank you, I made the correction.
  7 件のコメント
David
David 2013 年 10 月 12 日
That's a brilliant explanation. Completely get it now. Thank you!
Cedric
Cedric 2013 年 10 月 12 日
You're welcome!

サインインしてコメントする。

その他の回答 (1 件)

Youssef  Khmou
Youssef Khmou 2013 年 10 月 10 日
David, The variable temp is local (inside the function), as long as the iterative variable x didnt arrive at 1 the process continues, "temp" is set only inside function , N=4 :
inside func insde func
N=4 -> (Temp=0,..,Temp=3)-->N=3 (Temp=0,Temp=2) .....N=1
  2 件のコメント
David
David 2013 年 10 月 10 日
Think I've got it now. So the value of factorial(x - 1) is calculated and multiplied by x and calculated again over and over again until x == 1? Temp is specific to each iteration of factorial()? Thanks!
Youssef  Khmou
Youssef Khmou 2013 年 10 月 10 日
correct

サインインしてコメントする。

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by