——Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ——-
用多种方法实现递归的和:提示用户输入一个正整数n,求出并输出下列结果:1! + 2! + 3! + 4! + … + n!。
首先我们分析一下这个算式。
先分析阶乘:
1 != 1
2 != 1*2
3 != 1*2*3
…
n != 1*2*3*…*(n-1)*n
n != (n-1)!*n
定义一个阶乘的函数jieCheng(int n)
jieCheng(n) = jieCheng(n-1)*n;
在分析和:
1! + 2! + 3! + 4! + … + n!
1! + 2! +…+jieCheng(n-2)+jieCheng(n-1)+jieCheng(n)
定义函数sum(int n)
sum(n) = sum(n-1) + jieCheng(n)。
这是两个递归的算式,首先用递归的方式实现:
#include <stdio.h>
int sum(int n);
int jieCheng(int n);
int main()
{
//定义变量存储用户输入
int input = 0;
//提示用户输出
while(input <= 0)
{
printf("请输入一个正整数:\n");
scanf("%d",&input);
}
int result = sum(input);
//int result = jieCheng(input);
printf("结果为%d\n",result);
return 0;
}
int sum(int n)
{
if(n == 1) return 1;
return sum(n-1) + jieCheng(n);
}
int jieCheng(int n)
{
if(n == 1) return 1;
return jieCheng(n-1) + n;
}
非递归的方式实现1:
#include <stdio.h>
int sum(int n);
int jieCheng(int n);
int main()
{
//定义变量存储用户输入
int input = 0;
//提示用户输出
while(input <= 0)
{
printf("请输入一个正整数:\n");
scanf("%d",&input);
}
int result = sum(input);
//int result = jieCheng(input);
printf("结果为%d\n",result);
return 0;
}
//定义阶乘函数
int jieCheng(int n)
{
//定义变量保存阶乘结果
int temp = 1;
//计算阶乘
for(int j = 1; j<=n; j++)
{
temp *= j;
}
//返回阶乘值
return temp;
}
//定义求和函数
int sum(int n)
{
//定义变量保存和
int output = 0;
//计算和
for(int i = 1; i<=n ;i++)
{
//调用阶乘函数,加上第i时的阶乘值
output += jieCheng(i);
}
//返回阶乘和
return output;
}
非递归的方式实现2:
#include <stdio.h>
int sum(int n);
int jieCheng(int n);
int main()
{
//定义变量存储用户输入
int input = 0;
//提示用户输出
while(input <= 0)
{
printf("请输入一个正整数:\n");
scanf("%d",&input);
}
int result = sum(input);
//int result = jieCheng(input);
printf("结果为%d\n",result);
return 0;
}
int sum (int n)
{
//定义变量保存和
int output = 0;
//累加,每次加的是一个阶乘值
for(int i =1; i<=n; i++)
{
//定义变量保存阶乘的结果
int temp = 1;
//计算阶乘
for(int j = 1; j<=i; j++)
{
temp *= j;
}
//累加每次的阶乘结果
output += temp;
}
//返回和
return output;
}