用递归的方法求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);

第一次用参数值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),的调用都需要.............

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

  • 19
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

念君思宁

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值