递归方法,C语言或者c++

3、用递归方法编程实现

(1!+2!+3!+.......+n!),

不断增大N值,实验比较两种算法的运行效率。观察N增大到多大时,会导致递归算法在运行时崩溃。定义一个static变量,记录递归调用的次数。

 

n大于20一般就会出错。


#include "stdio.h"

static int cnt = 0;
//求n的阶乘
int fun(int n){
	if(n==1){
		return 1;
	}else{
		cnt++;
		return n*fun(n-1);
	}	
}
void main()
{
    int n;
    int i;
    long sum = 0;
    printf("请输入n:");
    scanf("%d",&n);
    for(i=1;i<=n;i++){
    	sum += fun(i);	
    }
    printf("1!+2!+...+%d!=%ld\n",n,sum);
    printf("共调用%d次",cnt);
}

 

#include <stdio.h>

static int count = 0; //次数

/**
 * 阶乘
 * @param n
 * @return
 */
int factorial(int n){
    count++;
    if(n == 1 || n == 2){
        return n;
    }
    //n的阶乘=n*(n-1的阶乘)
    return n * factorial(n-1);
}
/**
 * 阶乘求和
 * @param n
 * @return
 */
int sum_factorial(int n){
    count++;
    if(n == 1){
        return n;
    }
    //n的阶乘和 = n的阶乘 + (n-1的阶乘和)
    return factorial(n) + sum_factorial(n - 1);
}

int main() {
    int ret = sum_factorial(2);
    printf("%d, count=%d\n", ret, count);
}

 

您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~

如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~

ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632