用递归的方法求n!

举报
念君思宁 发表于 2023/02/19 20:20:24 2023/02/19
【摘要】 用递归的方法求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),的调用都需要.............

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。