2
我被分配了funct()并被告知将其转换为尾递归,所以我做了funct2()。我使用另一个堆栈溢出thread开始,它有用,但它始终是一个值。我不知道如何纠正我的尾递归(最初的规则递归)
我认为问题是由于ÿ值为0最初,和去其他功能的部分时,减去从而不是等同于初始值x。但我不确定。
#include <iostream>
#include <stdio.h>
using namespace std;
int funct(int x);
int funct2(int x, int y);
int main() {
int x = 24;
printf("%d %d", funct(x), funct2(x, 0));
}
int funct(int x) {
if (x <= 0){
return 0;
}
else if (x & 0x01){
return x + funct(x-1);
}
else {
return x - funct(x-1);
}
}
int funct2(int x, int y) {
if (x < 0){
return 0;
}
else if (x == 0){
return y;
}
else if (x & 0x01){
return funct2(x-1, y+x);
}
else {
return funct2(x-1, y-(x-1));
}
}
任何帮助表示赞赏。多谢你们!
尾递归不是C语言级别的功能,所以如果你编译器做了一些奇怪的事情,不增加尾部调用的堆栈级别......这将是一个特定的优化.. 。除非你用goto和标签写......它是C级结构,邪恶,邪恶的结构。 –