関数オブジェクトをそれ自体から呼び出すにはどうすればよいですか? 使えないようthis
です。例:
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * ??(n-1);
}
};
何に配置し??
ますか?
関数オブジェクトをそれ自体から呼び出すにはどうすればよいですか? 使えないようthis
です。例:
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * ??(n-1);
}
};
何に配置し??
ますか?
#include <iostream>
class factorial {
public:
int operator()(int n) {
if (n == 0)
return 1;
return n * (*this)(n-1);
}
};
int main()
{
std::cout << factorial()(5) << std::endl;
}
私にとってはうまくいきます。実例。
前述DyP
のように、電話をかけることができます(*this)(n-1)
。ただ、読み方がおかしいので、別のメソッドに分割してcalculate_factoral
呼び出したほうがいいでしょう。
何人かが指摘しているように、(*this)(n - 1)
構文をそのまま使用できます。しかし、この構文は正確には直観的ではないため、実際の実装を別の名前付きメソッドに分解することが、わずかに優れた解決策になる可能性があります。
class factorial {
public:
int operator()(int n) {
return impl(n);
}
private:
int impl(int n) {
// actual work here
}
};
You can either use explicit operator syntax:
class factorial {
int operator()(int n) {
if (n == 0)
return 1;
return n * operator()(n-1);
}
};
Or dereference this
:
class factorial {
int operator()(int n) {
if (n == 0)
return 1;
return n * (*this)(n-1);
}
};
確かに階乗?
私はJavaだけを知っており、再帰階乗は次のように書くことができます:
public class Factorial{
public int factorial(int n) {
return (n > 1) ? n * factorial(n-1) : 1;
}
}
同じ原理が当てはまると思います。