2
私はfunct()を割り当てられ、末尾再帰に変換するように指示されたので、funct2()を作成しました。私は別のスタックオーバーフローthreadを使用して開始し、それは作品の種類、それは常にオフの値です。私の末尾再帰を修正する方法は分かりません(元々は定期的再帰)
私は問題が原因初期値は0であることY値にあり、かつ機能の他に部分に行くとき、ではなく、初期に相当する値から減算考える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レベルの構造、悪、邪悪なコンストラクトです。 –