用递归的方法求n!

用递归的方法求n!

在写此函数之前,我们需要知道,函数递归是什么??

顾名思义:函数递归,着重在”递归“俩字,对于函数,我想大部分初始者已经不陌生,在这里笔者就不做过多的讲述!

在调用一个函数的过程中,又直接或者间接的调用该函数本身:称为函数的递归调用!

下面,笔者将用代码加分析的方法带领大家初步认识:函数的递归调用!

用递归的方法求n!;

对于数学知识,求阶乘0!=1;1!=1;2!=1*2;3!=1*2*3;4!=1*2*3*4;5!=1*2*3*4*5

但是仔细思考就会发现n!=n*(n-1)!我想这么浅显易懂的道理,读者应该都能看懂(数学在代码中占据很大地位)

因此阶乘=1(n=0,1)或者=n*(n-1)!

或不多说,下面请看笔者所写代码:

//用递归的方法求n!
#include <stdio.h>
int k=0;
long int fac(int n)
{
	long int answer;
	k++;
	//显示fac(n)函数第几次调用及参数n的值
	printf("the %d call,n=%d\n", k, n);
	if ((n == 0) || n == 1)
		return 1;
	else
		answer = n * fac(n - 1);   //多次调用fac函数
	return (answer);              //返回值
}
int main()
{
	int m;
	scanf_s("%d", &m);
	printf("the result is: %d! =%d\n", m, fac(m));
	return 0;
}

在这里,我们可以看出,计算5的阶乘需要5次调用函数fac(n);

扫描二维码关注公众号,回复: 14564551 查看本文章

第一次用参数值5去调用fac(n),返回值answer=5*fac(4);因为表达式中含有函数fac(4),

因此,需要用参数值为4 第二次去调用函数fac(n),此时返回值为answer=4*fac(3),.

依次类推,当最后以1为参数值调用时,返回值answer=1;

本次调用结束后返回到调用位置从而计算出fac(2)=2*fac(1)=2*1=2;

接着在返回到调用fac(2)的位置,从而计算出fac(3)=3*fac(2)=3*2=6;

接着在返回调用..........最后返回到fac(5)=120;

最后answer=120;  把结果输出!

在这个过程需要我们知道:函数的正确书写格式,函数的调用方法,if语句的f判断(0为假,非0为真);从而正确书写该代码!

至于转结果,笔者将以5!=120为列,进行运转

  在这里,每一次调用时:调用了多少次,并且调用该次数的n值,都能清晰的看出来!

在该代码中:answer = n * fac(n - 1);显得尤为重要,毕竟在该函数的递归调用中每一次的fac(n),的调用都需要.............

文章若有不规处,请读者多多指教!笔者将会:有则改之,无则加勉!!

猜你喜欢

转载自blog.csdn.net/weixin_64308540/article/details/125955540