我没有在C++中获得这种递归练习。那就是:理解此递归的难点
int fatt(int x){
int s=1; // here. since 's' will always be 1 shouldn't i get 1 as an output???
if(x>1) { s = x*fatt(x-1); }
return s;
}
int main()
{
int n;
cout << "Type a number: ";
cin >> n;
if (n < 0) { cout << "Error" << endl; }
if (n <=1) { cout << "Factorial: 1" << endl; }
else { cout << "Factorial: " << fatt(n) << endl; }
}
如果我把它s=0
返回我作为一个输出总是0
,如果我把2 O.o我不明白它是如何工作双打的结果。据我所知,x
总是会减少,直到达到2,并且返回结果,但每次调用该函数都不应得到1的值。
“不应该给'1的值”是的,但下一行将's'分配别的东西,所以不,它并不总是返回1. – tkausl
当你调用fatt(3)时,x不会改变。 fatt(3)的执行调用fatt(2),用另一个变量x创建一个新的上下文,但是不同。 –
递归的可视化有时会有所帮助:http://www.mrlamont.com/uploads/1/7/0/2/17021682/factorial.png – eol