汉邦问答 / 问答 / 问答详情

能详细点说明下递归吗,最好有现实例子说明

2023-07-06 08:14:53
肖振

递归,简单的说就是自己调用自己,执行递归函数降反复调用其自身,每调用一次就进入新的一层。例如,有函数f如下。

int f(int x)

{

int y;

z=f(y);

return z;

}

这个函数是一个递归函数,但是运行该函数将无休止的调用自身,这当然是不正确的,在此只是给你举个简单的例子而已。为了防止调用无休止的进行,必须加条件判断,满足某种条件后就不再做递归调用,然后逐层返回。在此举例说明递归调用的执行过程。

用递归法计算n!.

long f(int i)

{

if(n<0) printf("input error");return;

else if(i==0||i==1) return 1;

else return i*f(i-1);

}

main()

{

int n;

printf("please input n: ");

scanf("%d",&n);

printf("%d=%id ",n,f(n));

}

程序中的f是一个递归函数,如果n<0,n==0或者n==1时将结束函数的执行,否则就递归调用f函数自身。

假设输入3,即求3!。进入f函数i=3,不等于0或1,所以执行i*f(i-1),即

3*f(2)。然后再递归调用f(2),2不等于0或1,所以执行i*f(i-1),即2*f(1).继续调用f(1),此时1==1,结束函数的执行。

所以返回的结果是3*f(2)=3*2*f(1)=3*2*1=6.

希望你可以看懂,我感觉蛮简单的。

凡尘

递归是一种重要的编程技术。该方法用于让一个函数从其内部调用其自身。一个示例就是计算阶乘。0 的阶乘被特别地定义为 1。 更大数的阶乘是通过计算 1 * 2 * ...来求得的,每次增加 1,直至达到要计算其阶乘的那个数。

下面的段落是用文字定义的计算阶乘的一个函数。

“如果这个数小于零,则拒绝接收。如果不是一个整数,则将其向下舍入为相邻的整数。如果这个数为 0,则其阶乘为 1。如果这个数大于 0,则将其与相邻较小的数的阶乘相乘。”

要计算任何大于 0 的数的阶乘,至少需要计算一个其他数的阶乘。用来实现这个功能的函数就是已经位于其中的函数;该函数在执行当前的这个数之前,必须调用它本身来计算相邻的较小数的阶乘。这就是一个递归示例。

递归和迭代(循环)是密切相关的 — 能用递归处理的算法也都可以采用迭代,反之亦然。确定的算法通常可以用几种方法实现,您只需选择最自然贴切的方法,或者您觉得用起来最轻松的一种即可。

显然,这样有可能会出现问题。可以很容易地创建一个递归函数,但该函数不能得到一个确定的结果,并且不能达到一个终点。这样的递归将导致计算机执行一个“无限”循环。下面就是一个示例:在计算阶乘的文字描述中遗漏了第一条规则(对负数的处理),并试图计算任何负数的阶乘。这将导致失败,因为按顺序计算 -24 的阶乘时,首先不得不计算 -25 的阶乘;然而这样又不得不计算 -26 的阶乘;如此继续。很明显,这样永远也不会到达一个终止点。

因此在设计递归函数时应特别仔细。如果怀疑其中存在着无限递归的可能,则可以让该函数记录它调用自身的次数。如果该函数调用自身的次数太多,即使您已决定了它应调用多少次,就自动退出。

下面仍然是阶乘函数,这次是用 JScript 代码编写的。

// 计算阶乘的函数。如果传递了

// 无效的数值(例如小于零),

// 将返回 -1,表明发生了错误。若数值有效,

// 把数值转换为最相近的整数,并

// 返回阶乘。

function factorial(aNumber) {

aNumber = Math.floor(aNumber); // 如果这个数不是一个整数,则向下舍入。

if (aNumber < 0) { // 如果这个数小于 0,拒绝接收。

return -1;

}

if (aNumber == 0) { // 如果为 0,则其阶乘为 1。

return 1;

}

else return (aNumber * factorial(aNumber - 1)); // 否则,递归直至完成。

}

FinCloud

在调用一个函数的过程中又出现直接或者间接地调用该函数本身,注意,是该函数本身,就叫做函数的递归(调用)。

比如

int f(int x)

{

int y,z;

z=f(y);

return(2*z);

}

负数到底有没有阶乘啊,什么是双阶乘啊

负数没有阶乘,只有-1有双阶乘,双阶乘的意思是:(2n)!=2*4*6*……*2n,(2n+1)!=1*3*5*……*(2n+1),(-1)的双阶乘是0一般来说,定义一种新运算是为了某种需要,但到现在还没有什么数学的分支学科需要定义负数的阶乘,因此现在还没有这种算法,也不需要这种算法。
2023-07-05 12:04:472

负数有没有阶乘

负数没有阶乘。阶乘是一个正整数的乘积,而负数并没有阶乘的定义。因为阶乘的定义是基于自然数的,而负数不属于自然数的范畴。同时,阶乘的计算也要求参与乘积的数必须是正整数。
2023-07-05 12:04:531

变进制数的负数的阶乘

(-n)! = 1/(n+1)! , 其中n>=0。这里我们发现,0!是符合这个公式的:0!=1/1!=1。则阶乘数系第i 位置的权重Pi=i! ,i是任意整数。对于整阶乘数,实际上在最低位置右边还有一个“隐藏位置”,该位置的数值只能是0,权重是0!=1,因而无计数意义,我们可以把它想象成小数点,小数点右边就是小数系统,很完美的合在一起:(n,n-1,...21.123456......)_f = (n+1)! , 对应十进制是9999.9999...=10000。说明:这里负数的阶乘的定义是根据对称扩展而来,能够吻合0的阶乘且能够完善阶乘数系的表示,暂时没有发现它对其它组合公式有什么扩展贡献。
2023-07-05 12:05:021

为什么不能问这个问题,负数有没有阶乘

单从阶乘的定义来看单纯的负数是没有阶乘的,但如果推广到实数范围内可以用伽马函数来计算阶乘,伽马函数在负数范围内负整数以外的区域有定义和相应的函数值,某种程度上可以看作是负数的“阶乘”。
2023-07-05 12:05:151

负数的阶乘怎么算,如-100!

一样的、、. (-1)的n次方 乘以 100! 这里 n=100
2023-07-05 12:05:231

负数有阶乘吗吗?如果有怎么算,负数阶乘是怎么定义的?

好像没听说过吧,我记得阶乘是那种排列组合里面用的,那里不涉及负数吧,你去查查书,看看阶乘有没有定义负数呢,我记得没有吧。
2023-07-05 12:05:312

(5-3)的阶乘等于多少,(n-i)的阶乘一定是n大于i吗?

(5-3)的阶乘是2(n-i)的阶乘不一定大于n,大于i,比如(5-3)的阶乘
2023-07-05 12:05:382

负数的阶乘,小数的阶乘的计算方法?

小数和负数的阶乘是广义阶乘与伽玛函数(Gamma函数)有关,该函数也叫欧拉第二积分,是阶乘函数在实数(甚至在复数)上扩展的一类函数即a!=Γ(a+1)=aΓ(a)保留了阶乘的基本性质即a!=a×(a-1)!详情请点击:http://baike.baidu.com/view/909190.htm另外还有个神奇的性质,那就是((-0.5)!)的平方刚好是圆周率π噢~~
2023-07-05 12:05:451

负数有阶层吗

题主是否想询问“负数有阶乘吗”?没有。阶乘是指从1到n的连续自然数相乘的积,负数是没有的,一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1。
2023-07-05 12:05:511

负数有没有阶层求解答???

没有,小数也没有
2023-07-05 12:05:592

阶乘C的底数是负数怎么办

目前,除去-1有双阶乘外,其他负数是没有阶乘的。按照阶乘计算公式,零的阶乘为一,其他整数的阶乘为所有小于等于这个数的正整数的积。
2023-07-05 12:06:161

-0.5的阶乘是不是超越数

不是。阶乘是指从1到n的连续自然数相乘的积,目前,只有-1有双阶乘,其他负数没有阶乘,所以-0.5没有阶乘,更不是超越数。阶乘是由基斯顿.卡曼于1808年发明的运算符号,是数学术语,一个正整数的阶乘是所有小于及等于该数的正整数的积,并且0的阶乘为1,自然数n的阶乘写作n。
2023-07-05 12:06:231

请问这两个有什么区别?还有不是说负数没有阶乘吗?这两个为什么可以这样写?

请问这两个有什么区别?还有不是说负数没有阶乘吗?这两个为什么可以这样写?
2023-07-05 12:06:425

C语言阶乘为什么填入任何负数结果都为8?

代码里本来就没有指定参数为负数时的返回值
2023-07-05 12:06:571

-100的阶乘和100的阶乘一样吗

不一样。因为负数没有阶乘,只有-1有双阶乘,因此-100的阶乘和100的阶乘不一样。一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。
2023-07-05 12:07:481

C语言求阶乘程序,不知道哪里错了。请各位帮我指点一下,谢谢!可以运行,但是结果是一个负数。

sum1=sum1*i;sum=sum+sum1;
2023-07-05 12:08:074

-1/2的阶乘怎么算

利用伽玛函数
2023-07-05 12:08:165

高数问题

等于不一定,不连续就不行可以,其实你可以直接沿Y=X做对称就行了。你这个就是Y=F(x)>>-X=F(Y)>>X=F(Y)也就是它的反函数了!!!
2023-07-05 12:09:077

答案不应该是-4的介乘吗 为什么是4的介乘

负数没有阶乘,你连阶乘的定义都不知道
2023-07-05 12:09:232

编程:求正整数n的阶乘(n的值由键盘输入),不断尝试当n为多少时,阶乘第一次为负数?

以下是Python的代码示例:```pythonn = int(input("请输入一个正整数n: "))factorial = 1i = 1while factorial > 0:factorial *= iif factorial < 0:print(f"n为{i}时,阶乘第一次为负数")i += 1```首先,代码从键盘输入正整数n,然后用变量factorial来存储阶乘的值,初始值为1。使用while循环,每次循环都累乘i到factorial中,如果factorial变成了负数,就输出n为多少时第一次出现负数,并结束程序。如果没有出现负数,就继续循环,直到i大到足够大导致factorial溢出为止。
2023-07-05 12:09:311

sinx的幂级数展开式问题?

级数我不讲太多,相信书本上有关于sinx的幂级数展开方法,至于为什么书上的公式会写错,我觉得可能是打印时笔误。应将分母修改正为(2n+1)!,否则第一项将无意义。补注:(-1)!是不存在的,并不是不能定义负数的“阶乘”,而是负整数的“阶乘”发散!
2023-07-05 12:10:102

c语言 求阶乘

我也不知道它算的是什么,只是程序错在了i*=i;这里。i的作用是控制循环,LZ在循环体里改变了i的值,那么for循环执行的次数就会改变。如果不是程序需要,不要在循环体里改变控制循环次数的变量的值!
2023-07-05 12:10:208

long int范围是-2^31~2^31减一,为什么再求20的阶乘出现了负数?

20! = 2.4329020081766 * 10^182^31=2147483648,远远小于20的阶乘你需要使用double类型的变量
2023-07-05 12:10:361

2的阶乘的阶乘是什么啊?就是2!!代表的什么意思?怎样计算?谢谢

楼主大学生
2023-07-05 12:10:476

C语言求1到20阶乘的和,出来的是负数

溢出整数范围而已。long double 改为long long,最后printf用llf ,别问为什么,我也不知道,程序硬性要求,int用%d,long用ld,long long 用lld输出控制符,你们老师应该讲过的。
2023-07-05 12:11:152

编写一个Python程序,输入N,返回N!的值?

x = 1n = int(input("输入N:"))for i in range(1, n + 1): x = x * iprint(x)#希望以上的程序对你有所帮助,谢谢你的支持!
2023-07-05 12:11:253

c语言程序纠错,这个是算阶乘的程序

22的阶乘是个多么大的数?早就溢出了,应该将int fact=1;改为double fact=1;printf("%d",fact);改为printf("%.0f",fact);
2023-07-05 12:11:483

Excel EXCEL中怎么表示阶乘

FACT函数可以满足这个要求http://office.microsoft.com/zh-cn/excel-help/HP005209084.aspx?CTT=1FACT返回数的阶乘,一个数的阶乘等于 1*2*3*...* 该数。语法FACT(number)Number 要计算其阶乘的非负数。如果输入的 Number 不是整数,则截尾取整。
2023-07-05 12:13:283

66/3!为什么等于11?

你好。如下图所示。这是详细的计算解答过程。答案是正确的。
2023-07-05 12:14:111

!!是什么数学运算??

双阶乘
2023-07-05 12:14:242

/ 代表什么数学符号

您好!“!”在数学中表示阶乘阶乘阶乘(factorial)是基斯顿·卡曼(christiankramp,1760–1826)于1808年发明的运算符号。阶乘,也是数学里的一种术语。阶乘指从1乘以2乘以3乘以4一直乘到所要求的数。例如所要求的数是4,则阶乘式是1×2×3×4,得到的积是24,24就是4的阶乘。例如所要求的数是6,则阶乘式是1×2×3×……×6,得到的积是720,720就是6的阶乘。例如所要求的数是n,则阶乘式是1×2×3×……×n,设得到的积是x,x就是n的阶乘。在表达阶乘时,就使用“!”来表示。如h阶乘,就表示为h!阶乘一般很难计算,因为积都很大。以下列出1至10的阶乘。1!=1,2!=2,3!=6,4!=24,5!=120,6!=720,7!=5040,8!=403209!=36288010!=3628800另外,数学家定义,0!=1,所以0!=1!不过,阶乘是在自然数范围里的,小数和负数没有阶乘,像0.5!,0.65!,0.777!,-1!,-3.8!都是错误的。阶乘的作用:表示排列组合中的计算
2023-07-05 12:14:351

数学里!的意思

表示阶乘,就比如4!等于一乘2乘3乘4等于24 以此类推谢谢采纳
2023-07-05 12:14:434

排列组合中!什么意思

1、数学中的排列是指从给规定个数的元素中取出指定个数的元素进行排序。 2、组合则是指从给规定个数的元素中仅仅取出指定个数的元素,将其组合,不考虑排序。 3、排列组合是研究给定要求的排列和组合可能出现的情况的总数。 4、排列组合与古典概率论关系密切。
2023-07-05 12:14:532

matlab while循环 任意整数n的阶乘?

res = 1n = 5while n > 0 res = res * n n = n - 1end
2023-07-05 12:15:002

数学的!是什么

阶乘。例如5!=5*4*3*2*1=120,你可以理解为累乘。
2023-07-05 12:15:085

N的阶乘怎么算啊

没有。
2023-07-05 12:18:342

为什么34的阶乘结果是0

溢出了
2023-07-05 12:19:062

双阶乘是什么意思?

数学中n!!这叫双阶乘。但我们一般用n!表示阶乘,所以我们用m!!表示双阶乘,因为在对双阶乘的表达中会用到阶乘的概念,所以要用不同的字母来表示。但不管用哪个字母表示,其意义是一样的。双阶乘是一个数学概念,用n!!表示。正整数的双阶乘表示不超过这个正整数且与它有相同奇偶性的所有正整数乘积。前6个正整数的双阶乘分别为:1!!=1,2!!=2,3!!=3,4!!=8,5!!=15和6!!=48。示例:3!!=1×3=35!!=1×3×5=156!!=2×4×6=48扩展资料:对于复数应该是指所有模n小于或等于│n│的同余数之积。对于任意实数n的规范表达式为:正数 n=m+x,m为其正数部,x为其小数部负数n=-m-x,-m为其正数部,-x为其小数部对于纯复数n=(m+x)i,或n=-(m+x)i我们再拓展阶乘到纯复数:正实数阶乘: n!=│n│!=n(n-1)(n-2)....(1+x).x!=(i^4m).│n│!负实数阶乘: (-n)!=cos(mπ)│n│!=(i^2m)..n(n-1)(n-2)....(1+x).x!参考资料:百度百科---双阶乘
2023-07-05 12:19:151

excel怎么算阶乘

阶乘(factorial)是基斯顿·卡曼于1808年发明的运算符号。也是数学里的一种术语。一个正整数的阶乘是所有小于或等于该数的正整数的积,0的阶乘为1。自然数n的阶乘写作n!。任何大于1的自然数n阶乘表示方法:n!=1×2×3×……×nFact返回某数的阶乘。语法:FACT(number)Number 必需。要计算其阶乘的非负数。如果 Number 不是整数,则截尾取整。【公式】=FACT(A2)
2023-07-05 12:19:381

用C++编写求N的阶乘最后面的非零位的程序(N很大)!

#include<stdio.h>void main(){ int a=1,i,n; scanf("%d",&n); for(i=1;i<=n;i++) { a=a*i; while(a%10==0)a=a/10; a=a%10; } printf("%d ",a);}
2023-07-05 12:19:482

98!分之100!等于

这也好意思问
2023-07-05 12:20:095

数学中n!是什么意思?

n的阶乘1*2*3*... ...*(n-1)*n
2023-07-05 12:20:248

1平方呎等于多少平方米?

1英尺=0.305米,1平方米=1/(0.305*0.305)约=10.75平方英尺
2023-07-05 12:10:062

100平方英尺等于多少平方米

根据长度单位换算法则: 1英尺等于0.3047999995367米; 则1平英尺等于0.0929030401442平米; 100平英尺等于9、29030401442平米。 根据科学计数法修约规则,保留小数点后两位可得: 100平英尺等于9、29平米。
2023-07-05 12:10:141

碳酸的化学式怎么写 碳酸是种什么物质

1、碳酸化学式:H2CO3。 2、碳酸(H2CO3)是一种二元弱酸,电离常数都很小。但也有认为其为中强酸,因为根据无机酸酸性强弱判断式(OH)nROm可判断其酸性与磷酸相似。在常温、常压下,二氧化碳饱和溶液的浓度约为0.033mol/L,pH为5.6,pKa=6.37。 3、H2CO3 (pKa1=6.38,pKa2=10.33,p代表取负常用对数。)饱和碳酸溶液(纯CO2,压力为1 atm)的pH约为4,而在自然条件下CO2含量是0.03%,溶解达到饱和时pH=5.6。这也是为什么定义酸雨为pH小于5.6的雨水的原因。要使PH达到 3.7,可以通过降温,加压(实际是提高CO2浓度)来实现。
2023-07-05 12:10:161

1英尺等于多少平方米

1英尺=30.48cm 1英寸=2.54cm 1cm=0.3937英寸 1平方英尺=0.3048^2平方米=0.093平方米
2023-07-05 12:10:221

1平米等于多少平尺?

一平尺米约等于0.99平方米。换算步骤:1尺=1/3米1平尺=1/3×1/3=1/9平方尺≈0.11平方米其余换算方法:1平方尺=0.33米*0.33米所以1平方米=9平方尺。1米=3尺,那么1平方米=9平方尺。所以1平方尺=1/9平方米。
2023-07-05 12:09:531

碳酸的电子式是什么?

硫酸的电子式是H:O:O:S:O:O:H。硫酸的结构式:O↑H-O-S-O-H↓O。上、下各还有两个电子,中间的硫原子跟另两个氧原子分别形成两个配位键,在S的上方和下方。纯硫酸一般为无色油状液体,密度1.84g/cm,沸点337℃,能与水以任意比例互溶,同时放出大量的热和水。碳酸的含义概况碳酸Carbonicacid是一种由二氧化碳溶解于水产生的弱酸,化学方程式是H2CO3。当酸分离或放弃一个氢离子时,由此产生的分子叫做碳酸氢盐离子。碳酸常见于自然界,如苏打汽水,香槟酒和血液中都能找到它。这种酸甚至还存在于雨中。在生产苏打水的过程中,二氧化碳被溶解在水中。如上所述,这一过程产生碳酸。这种酸,与磷酸和其它酸一起,生成汽水的酸味。在喝发泡汽水时,还能让人有轻微的烧灼感。实际上,是这种酸让汽水有这种特殊口味。
2023-07-05 12:09:471

1英尺等于多少平方米?

1、4000平方英尺=371.612160577平方米2、单位换算:1㎡(1平方米)=100d㎡(100平方分米)=10000c㎡(10000平方厘米)=1000000m㎡(1000000平方毫米)=0.0001公顷=0.000001平方公里=0.01公亩=0.0002471054英亩=0.0000003861平方英里=10.763910417平方英尺=0.0015亩。3、英尺——在英语国家中,古代和现代各种以人脚长度为依据的长度计量单位。一般为25—34厘米。在许多其他西方语言中,脚和计量用的尺都用同一个词表示,虽然它所代表的长度各个地方、各个时期有所不同。例如德语言中的fuss,挪威和丹麦语中的fod等。在其他语言中,翻译成英语为foot,并表示类似长度单位的词,但并不与人脚的词相同,如日语和汉语中的尺。俄语中的fut看来只不过是英语foot的音译。在大多数国家里,英尺及其倍数和分数已分别被公制单位的米所取代。在少数几个国家里,仍沿用英尺,但还是用米来作注释,美国在1959年将英尺定为30.48厘米。
2023-07-05 12:09:453

尺和平方米的换算公式

尺和平方米的换算公式:一平方英尺相当于0.0929平方米。在公制术语中,1平方英尺是一个边长为0.3048米长的正方形面积。1平方英尺≈929.0304平方厘米=144平方英寸≈3.58700643×10-8平方英里≈0.111111111平方码≈0.09290304平方米。平方米(㎡,英文:squaremeter),是面积的公制单位。定义为边长为1米的正方形的面积。在生活中平方米通常简称为“平米”或“平方”。港台地区则称为“平方公尺”。平方米(㎡,法文:mètrecarré,英式英文:squaremetre,美式英文:squaremeter),是面积的国际单位。是生活和工作中常用的测量方式标准。定义:边长为1米的正方形的面积被定义为1平方米,一块任意形状的平面的面积如果等效于边长为1米的正方形的面积也称为1平方米。
2023-07-05 12:09:371