实现思路
- 首先判断是否为素数
- 若是素数递归相加
- 返回最后的结果
代码块实现
- 判断素数函数
int sushu(int n)
{
int i = 0;
int flag = 1;//标记变量,若为1是素数
for(i = 2; i<n; i++)
{
if(n%i == 0)
{
flag = 0;//为0不是素数
break;
//return 0;
}
}
if(n == 1)//n=1的时候不能进入循环判断,只能自己判断
{
flag = 1;
}
/*循环之后判断是不是素数*/
if(flag == 0)
{
return 0;//不是素数则返回0,为后面相加做准备
}
if(flag == 1)
{
return n;//为素数则返回相加
}
}
- 递归函数
int fac(int n)
{
int sum = 0;
int f=0;
if(n == 1)//递归为1后返回
{
return 1;
}
/*判断是不是素数*/
if(sushu(n) == n)
{
sum = fac(n-1) + n;//若为素数则相加
return sum;//返回相加之和
}
else//不为素数则不断进入递归
{
f = fac(n-1);
return f;
}
}
- 返回最后的结果
int main()
{
int i ,j ;
int n;
int sum = 0;
printf("请输入n:\n");
scanf("%d",&n);
sum = fac(n);
printf("\nsum = %d\n",sum);
}
- 最后结果
递归主要是层层进入,最后找到最后一层的内容后再逐步往上返回