初学C 求教一个菜鸟问题!

来源:百度知道 编辑:UC知道 时间:2024/06/15 04:43:48
这是书上的 '使用递归函数计算阶乘'

#include <stdio.h>

unsigned int f,x;
unsigned int factorial(unsigned int a);

int main( void )
{
puts("Enter an integer value between 1 and 8:");
scanf("%d",&x);

if( x>8 || x<1 )
{
printf("Only values from 1 to 8 are acceptable!");
}
else
{
f = factorial(x);
printf("%u factorial equals %u\n", x,f);
}

getch();
return 0;
}

unsigned int factorial(unsigned int a)
{
if (a == 1)
return 1;
else
{
a *= factorial(a-1);
return a;
}
}
-----------------------------
其中这一段
{
a *= factorial(a-1);
return a;
}

实在是看不懂啊!
假如 x赋予a的参数是8
*=不是符合赋值么?
那就是a = a*(a-1)啊 那

factorial() 是一个递归函数

你看factorial()里嵌套调用了它自己

就是说
unsigned int factorial(unsigned int a)
{
if (a == 1) //如果a==1,则返回1
return 1;
else
{
a *= factorial(a-1); /*如果a!=1,则计算a*(a-1),如此循环,直到a==1.

即a*(a-1)*(a-2)....*2*1 */
return a;
}
}

这就是一个递归的循环。就是用来计算阶乘的

注意人家是a *= factorial(a-1);,不是a*=(a-1)!!!
factorial(a-1)是什么?factorial(a-1)*=factorial(a-2)
也就是说,factorial(1)=1,factorial(2)=2*factorial(1)
factorial(3)=3*factorial(2),factorial(a)=a*factorial(a-1)
这就是a!=a*(a-1)!啊
ps:a *= factorial(a-1);人家写的是a *= factorial(a-1),;计算机看的是factorial(a-1),当然知道是factorial(a-1)而不是(a-1)了. factorial是一个你自己定义的函数,只要你定义了,不管叫什么名,计算机都认得.你以为你穿个马甲就不认识你了?

是a =a*factorial(a-1);这相当于,An=n*A(n-1);这样能明白吧,