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