一个简单的C语言题。用递归实现n!+(n-1)!+(n-2)!+...+2!+1!

#include<stdio.h>
#include<conio.h>
//10!+9!+....+1!
int fun(int n)
{

}
int main()
{
printf("%d\n",fun(10));
getch();
return 0;
}

说明:请补充fun函数,用递归实现该功能

第1个回答  2013-04-20
//只一层递归很难,我用两个递归实现的,你先看看。
#include "stdio.h"
#include<conio.h>
//10!+9!+....+1!

int s(int n)
{
if(n>1)
return s(n-1)*n;
else
return n;
}
int fun(int n)
{
if(n>1)
return fun(n-1)+s(n);
else
return s(n);
}
int main()
{
printf("%d",fun(10));
getch();
return 0;
}

//实在想用一个函数递归,可以如下:
#include "stdio.h"
int fun(int n){
int s=1;
if(n>1)
{
for(int i=1;i<=n;i++)
s*=i;
return fun(n-1)+s;
}
else
return 1;
}

int main(){
printf("%d",fun(10));
}
第2个回答  2013-04-20
int fun(int n)
{
int N=1;
for(int i =1 ;i<=n;i++)
{
N=N*i;
} //求n!的值

return fun(n-1)+N;//递归调用
}本回答被提问者采纳
第3个回答  2013-04-20

建议先写个求n!的函数

int fun1(int n)
{
if(n>1)
fun1(n)*=fun1(n-1);
else if(n==1)
return fun1(n);
else
return -1;
}

然后求和就可以了

一个简单的C语言题。用递归实现n!+(n-1)!+(n-2)!+...+2!+1!
include<stdio.h>double fac(int n){if(n==0)return 1.0; return n*fac(n-1);}double sum(int n){if(n==1)return 1.0; return fac(n)+sum(n-1);}int main(){int n; scanf("%d",&n); printf("%.0lf\\n",sum(n)); return 0;} ...

c语言,求这道题用递归函数的答案题目如图
递归关系就是实体自己和自己建立关系。Fib(0) = 1 [基本情况] Fib(1) = 1 [基本情况] 对所有n > 1的整数:Fib(n) = (Fib(n-1) + Fib(n-2)) [递归定义] 尽管有许多数学函数均可以递归表示,但在实际应用中,递归定义的高开销往往会让人望而却步。例如:阶乘(1) = 1 [基本情况] ...

C语言用递归算法求解下面这个题!!!求大神
for (int i = 1; i <= n; i++) { \/\/ 计算1\/1+2+3+...+n s += i;} return sum(n-1) + 1\/s; \/\/ 递归调用 } } int main() { int n;printf("请输入n的值:");scanf("%d", &n);printf("sum = %.2f\\n", sum(n));return 0;} 在这个递归函数中,我们使用...

用C语言编写程序从键盘输入一个正整数数n,输出n!
编程实现计算n!,也就是n*(n-1)*(n-2)*...*1,可以通过递归函数来实现,具体实现方法:include <stdio.h>int Func(int n){if(n < 2)return 1;else return n*Func(n-1);} void main(){int n =0,m=0;printf("请输入一个正整数:")scanf("%d",&n);m=Func(n);printf("...

c语言编程中,如何用递归实现计算n的阶乘?
这样子写程序就可以了,vc6下验证成功 include<stdio.h> void main(){ long int sum=0;long int count(int n);int n;printf("input n=");scanf("%d",&n);printf("result is %ld\\n",count(n));} long int count(int n){ if(n>1)return n*count(n-1);else return 1;} ...

C语言 用递归思想找出一个数组中出现次数最多的数
反过来的过程就是递归了,对于n个元素的数组,求得n-1个元素中出现最多的数值和频度,如果第n个元素与n-1个中的最多的值相同,那么这个就是要求的值,并次数加1. 否则计算第n个数出现的次数,并与n-1中最多的数出现次数对比。代码:include <stdio.h>void find(int *a, int l, int *max...

C语言指针编程:用递归方法求1!+2!+…+n!。
\/\/ n 不能太大,太大会溢出。但是思路就是这样的。#include <stdio.h>int sum(int n){ if(n==1) return 1; else { int s=1; int i; for(i=1;i<=n;i++) s*=i; return s+sum(n-1); }}int main(){ int n; while(scanf("%d",&n)!=E...

C语言递归问题!
描述:把一个整数按n(2<=n<=20)进制表示出来,并保存在给定字符串中。比如121用二进制表示得到结果为:“1111001”。参数说明:s: 保存转换后得到的结果。n: 待转换的整数。b: n进制(2<=n<=20)void numbconv(char *s, int n, int b){ int len;if(n == 0) { strcpy(s, "");r...

C语言递归算法
一个函数在它的函数体内调用它自身称为递归调用。这种函数称为递归函数。C语言允许函数的递归调用。在递归调用中,主调函数又是被调函数。执行递归函数将反复调用其自身,每调用一次就进入新的一层。(引自谭浩强的C语言书里)用递归法计算n!可用下述公式表示:n!=1 (n=0,1)n×(n-1)! (...

c语言输入一个整数,用递归算法将整数倒序输出.
return;} order_print(n/10);printf("%5d",n%10);} void reverse_print(intn){ if(n<10){ printf("%-5d",n);return;} printf("%-5d",n%10);reverse_print(n/10);} int main(void){ int n;printf("Inputainteger:");scanf("%...

相似回答