你这里用循环就不用递归,用递归就不用循环,两个不能一起来啊
递归版本
#include <iostream>
using namespace std;
double fun1(int n)
{
if (n == 1)
{
return 1;
}
else if (n % 2 == 0)
{
return -1.0 * n / (2 * n - 1) + fun1(n - 1);
}
else
{
return 1.0 * n / (2 * n - 1) + fun1(n - 1);
}
}
int main()
{
int n;
cout << "请输入一个整数 n:";
cin >> n;
cout << "结果为:" << fun1(n) << endl;
return 0;
}
循环版本
double fun1(int n)
{
double sum = 0;
int i = 1;
while (i <= n)
{
if (i % 2 == 0)
{
sum -= i * 1.0 / (2 * i - 1);
}
else
{
sum += i * 1.0 / (2 * i - 1);
}
i++;
}
return sum;
}
你这写的有点恐怖,其实表达式很简单啊,分子是整数序列,分母是奇数序列。你是需要用循环,还是需要用递归?递归本身就是循环了
#include <stdio.h>
int main()
{
int n,flag = 1;
double res = 0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
res += flag * i*1.0/(2*i-1);
flag = -flag;
}
printf("%lf",res);
}
递归
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double fun(int n)
{
if(n==1)
return 1;
return pow(-1.0,n+1) * n/(2*n-1) + fun(n-1);
}
int main()
{
int n;
scanf("%d",&n);
printf("%lf",fun(n));
system("pause");
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!今日在写代码中添加一个类后,触发了诸多错误,且错误均是在编译后产生的
首先,让我们来端详一下这些错误
足足
170条错误
瞬间就给我搞懵逼了
并且我仔细检查了每一个错误
发现在语法上均没有错误
那么这些问题是如何产生的呢?
通过观察 不难发现 所有错误都是与Line这个类有关的
错误的原因就是头文件的问题
可能的原因有以下几种(由网上冲浪加以总结,由于编者水平有限,可能有误,恳请指出)
经检查 1无问题
2 由于使用了#pragma once
不会重复包含头文件(或用#ifndef
)
实际问题出现在3中
Shape类与Line类互相包含了对方的头文件
造成了编译器无休止的彼此包含
解决方法
将Line类写在Shape.h中
参考资料:
关于【error C3646: 未知重写说明符】的若干种可能性
2020.6.6
编者水平有限 希望能对有相同遭遇的朋友有所帮助