用C语言求N的阶层。程序怎么写

Python017

用C语言求N的阶层。程序怎么写,第1张

1、使用递归算法

#include <stdio.h> 

#include <process.h> 

long factorial(int n)

{

long result

if (n<0)

{

printf("n<0,请输入大于等于0的整数!")

return -1

}

else if (n == 0 || n == 1)

{

result = 1

}

else

{

result = n*factorial(n - 1)

}

return result

}

main()

{

int n = 10.0

long iNum

iNum = factorial(n)

printf("10!=%ld\n", iNum)

system("pause")

}

2、使用循环

#include<stdio.h>

#include<process.h>

int main()

{

int  i = 1  //累加变量

long j = 1  //储存结果

int  k = 1  //输入的数值

printf("请输入一个数字:")

scanf("%d", &k)

do

{

j = j*i

i++

} while (i <= k)

printf("%ld\n", j)

system("pause")

return 1

}

以上两种方式是求阶乘的普通算法,求得的结果表示范围都是有限的,如果算大数的阶乘还要另外的算法。

首先,这个叫做“阶乘”而不是“阶层”。

其次,return

1是因为

0!

=

1,数学上就是这么定义的,这个和C语言无关。

递归有两个阶段,第一阶段是反复地调用自身,直到触发终止条件;第二阶段是,逐层计算并返回调用结果。

就拿你这个例子来说,假设要计算4的阶乘,首先是递归地调用自身:

4!

=

func(4),

此时n为4大于0,所以func(4)

=

4

*

func(4-1)

=

4*func(3)

同样地:

3!

=

func(3)

=

3*func(3-1)

=

3*func(2)

2!

=

func(2)

=

2*func(2-1)

=

2*func(1)

1!

=

func(1)

=

1*func(1-1)

=

1*func(0)

这时注意了,当计算func(0)时,n=0,触发边界条件,所以递归调用停止,return

1。

接下来,就是以相反的顺序,,逐层返回结果了:

0!

=

func(0)

=

1

1!

=

func(1)

=

1*func(0)

=

1*1

=

1

2!

=

func(2)

=

2*func(1)

=

2*1

=

2

3!

=

func(3)

=

3*func(2)

=

3*2

=

6

4!

=

func(4)

=

4*func(3)

=

4*6

=

24

这样就得到了最终的结果:24。