С одной стороны, он плохо закодирован:)
double foo (int n) { // foo return a double, and takes an integer parameter
int i; // declare an integer variable i, that is used as a counter below
double sum; // this is the value that is returned
if (n==0) return 1.0; // if someone called foo(0), this function returns 1.0
else { // if n != 0
sum = 0.0; // set sum to 0
for (i =0; i<n; i++) // recursively call this function n times, then add it to the result
sum +=foo(i);
return sum; // return the result
}
}
Вы вызываете foo () всего что-то вроде n ^ n (где вы округляете n до ближайшего целого числа)
Например:
foo (3) будет вызываться 3 ^ 3 раза.
Удачи и счастливого Рождества.
РЕДАКТИРОВАТЬ: упс, только что-то исправили.Почему foo возвращает двойной?Он всегда будет возвращать целое число, а не двойное.
Вот лучшая версия с микрооптимизацией!: D
int foo(int n)
{
if(n==0) return 1;
else{
int sum = 0;
for(int i = 0; i < n; ++i)
sum += foo(i);
return sum;
}
}