C语言 是否可以在运行时获取递归值?



我有一个斐波那契递归函数:

int efib (int num) {     
if (num == 0){    
return 0;
}else if (num == 1){ 
return 1;
}else if (num == -1){ 
return -1;
}else if (num > 0){  
return efib(num - 1) +  efib (num - 2);
}else{    
return efib (num + 1) + efib(num + 2);
}
}

我正在尝试找到int值溢出的确切元素num,是否可以获取当前的递归值以将其与int数据类型可以容纳的最大值进行比较?

我知道 int 可以容纳的最大值包含在斐波那契数列中是 1836311903。

我正在尝试找到 int 值溢出的确切元素 (num(

为防止溢出,请在添加之前将 2 个操作数传递给 OF 测试函数。

它使用"将其与 int 数据类型可以容纳的最大值进行比较"。

#include <limits.h>
int is_undefined_add1(int a, int b) {
return (a < 0) ? (b < INT_MIN - a) : (b > INT_MAX - a);
}
....
// return efib(num - 1) +  efib (num - 2);
int a = efib(num - 1);
int b = efib(num - 2);
if (is_undefined_add1(a, b)) {
fprintf(stderr, "fib[%d] was about to overflown", num);
exit(EXIT_FAILURE);
}
return a + b;

如果有一个更宽的类型(longlong longintmax_t(可用,只需通过该类型相加,并根据int范围检查总和。 @Barmar

#if LLONG_MAX/2 >= INT_MAX && LLONG_MIN/2 <= INT_MIN
int is_undefined_add1(int a, int b) {
long long sum = a;
sum += b;
return sum < INT_MIN || sum > INT_MAX;
}
#else
// as above
#endif

最新更新