递归求阶乘和

6-2 递归求阶乘和 (10 分)
本题要求实现一个计算非负整数阶乘的简单函数,并利用该函数求 1!+2!+3!+...+n! 的值。
函数接口定义:
double fact( int n );
double factsum( int n );
函数fact应返回n的阶乘,建议用递归实现。函数factsum应返回 1!+2!+...+n! 的值。题目保证输入输出在双精度范围内。
裁判测试程序样例:

include <stdio.h>

double fact( int n );
double factsum( int n );

int main()
{
int n;

scanf("%d",&n);
printf("fact(%d) = %.0f\n", n, fact(n));
printf("sum = %.0f\n", factsum(n));

return 0;

}

/* 你的代码将被嵌在这里 */
输入样例1:
10
输出样例1:
fact(10) = 3628800
sum = 4037913
输入样例2:
0
输出样例2:
fact(0) = 1
sum = 0

double fact( int n )
{
double r;
if(n==1||n==0)
r=1;
else
r=n*fact(n-1);
return r;
}
double factsum( int n )
{
double a;
if(n==0)
a=0;
else if(n==1)
a=1;
else
a=factsum(n-1)+fact(n);
return a;
}

原文地址:https://www.cnblogs.com/1112zx/p/10549649.html

时间: 2024-11-07 09:52:45

递归求阶乘和的相关文章

利用递归求阶乘

1 package com.d; 2 3 import java.util.Scanner; 4 5 public class Digui { 6 7 public static void main(String[] args) { 8 Digui d = new Digui(); 9 10 System.out.println("请输入一个整数"); 11 Scanner scan = new Scanner(System.in); 12 int a = scan.nextInt()

[Lua学习]递归求阶乘

1 --递归求阶乘 2 function func(n) 3 if n ~= 1 then 4 return n * func(n - 1) 5 else 6 return 1 7 end 8 end 9 10 print("输入整数:") 11 a = io.read("*number") 12 print(a .. "! -> " .. func(a)) ps:函数内也可以用(a and b) or c 这种形式的语句替代(未亲测).

Java50道经典习题-程序22 递归求阶乘

题目:利用递归方法求5!.分析:递归公式:n*factorial(n-1); 1 public class Prog22 { 2 public static void main(String[] args) { 3 System.out.println(factorial(5)); 4 } 5 //递归求阶乘 6 public static long factorial(int n) { 7 if(n==0||n==1) { 8 return 1L; 9 } 10 return n*factor

java例题_22 用递归求阶乘 5!

1 /*22 [程序 22 递归求阶乘] 2 题目:利用递归方法求 5!. 3 程序分析:递归公式:fn!=fn*4! 4 */ 5 6 /*分析 7 * 递归:如果其中每一步都要用到前一步或前几步的结果,称为递归的 8 * 根据提示,可以用算法x!=x*(x-1)!;y=x-1,y!=y*(y-1)!;... 9 * 10 * */ 11 12 13 package homework; 14 15 public class _22 { 16 17 public static void main

比较喜欢的一种求阶乘的方法:用递归求阶乘

/** * 求n的阶乘 *细细品味,回味无穷 * @param num */ //要点:用递归,得给方法的一个结束条件,此题递归结束条件就是num==1 public static int getFactorial(int num){ return num==1 ? 1 : num*getFactorial(num-1); }

递归求阶乘

输入0到9的数字计算其阶乘: public class Test1 { public static void main(String[] args) { Scanner sca = new Scanner(System.in); System.out.println("请输入一个数[0,10):"); int a = sca.nextInt(10); if(a>9||a<0){ System.out.println("输入的数不正确..."); }els

只会用这简单的递归求阶乘

public  class  阶乘{ public  static  int  A(int n){ if(n==1) return 1;  //注释:1的阶乘为1: else  if(n==0) return 1;  //注释:0的阶乘为1: else return  A(n-1)*n;  //注释:除0.1外,n!=n*(n-1)*(n-2)*···*2*1: } public  static  void  main(String[]  args){ System.out.println(阶乘

基本递归(3)求阶乘

/* 名称:递归求阶乘: 作者:君翼坦荡荡~ 主要方法:递归 */ #include<iostream> using namespace std; //递归部分 int qiujiecheng(int i) { int sum=0; if(i==0) return 1; else sum = i * qiujiecheng(i-1); return sum; } int main( ) { int n,s; cin>>n; s=qiujiecheng(n);//调用函数 cout&

C语言用递归求斐波那契数,让你发现递归的缺陷和效率瓶颈

递归是一种强有力的技巧,但和其他技巧一样,它也可能被误用. 一般需要递归解决的问题有两个特点: 存在限制条件,当符合这个条件时递归便不再继续: 每次递归调用之后越来越接近这个限制条件. 递归使用最常见的一个例子就是求阶乘,具体描述和代码请看这里:C语言递归和迭代法求阶乘 但是,递归函数调用将涉及一些运行时开销--参数必须压到堆栈中,为局部变量分配内存空间(所有递归均如此,并非特指求阶乘这个例子),寄存器的值必须保存等.当递归函数的每次调用返回时,上述这些操作必须还原,恢复成原来的样子.所以, 基