如何处理递归函数和迭代函数中的编译错误c2660 ?


#include <stdio.h>
double recursive(int n);
double iterative(int n);
int n;
double ans1, ans2;
int main(int n) {
do {
printf("input:");
scanf("%d", &n);
ans1 = recursive(n);
ans2 = iterative(n);
printf("%f", ans1);
printf("%f", ans2);
} while (n != 0);
return 0;
}
double recursive(int n) {
double result = 0.0;
result += (1 / n);
return recursive(n); 
}
double iterative(int n) {
int i;
double result = 0.0;
for (i = 0; i < n; i++) {
result += (1 / n);
}
return result;
}

Visual studio说递归函数和迭代函数有c2660错误。我想我在声明函数和使用函数时分别使用了一个参数。我该如何解决这个问题?

这里的大问题是在您的recursive函数。每个递归函数都需要一个基本情况。也就是说,必须存在一些条件,当其为真时,不会导致递归调用。此外,除非该条件基于某些全局变量(这不是一个好主意),否则您需要更改调用函数时使用的参数,否则它每次都会做同样的事情,并且永远不会达到基本情况。正如你所拥有的那样,对recursive的调用将永远不会返回,因为它总是以相同的参数调用自己。

如果不理解函数的目的,就很难知道这个条件应该是什么。

最新更新