#include <iostream>
#include <functional>
using namespace std;
typedef function<int(int)> func;
int f2(int x){
return x*x;
}
int f3(int x){
return x*x*x;
}
//cach 1, dung recursion
int sum1(int n,func f){
if(n>0) return f(n)+sum1(n-1,f);
else return 0;
}
//cach 2, dung loop
int sum2(int n, func f){
int s=0;
for(int i=1;i<=n;i++) s+=f(i);
return s;
}
//cach 3, dung cong thuc
int sum3(int n, int k){
int temp=(n*(n+1))/2;
switch(k){
case 1: return temp;
case 2: return temp*(2*n+1)/3;
case 3: return temp*temp;
default:return 0;
}
}
//cach 4, dung binary recursion
int sum4(int nfrom,int nto, func f){
if (nfrom==nto) return f(nfrom);
else {
int nmiddle=(nto+nfrom)/2;
return sum4(nfrom,nmiddle,f)+sum4(nmiddle+1,nto,f);
}
}
int main(){
cout<<sum1(3,f2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8ZnVuY3Rpb25hbD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgZnVuY3Rpb248aW50KGludCk+IGZ1bmM7CgppbnQgZjIoaW50IHgpewogICAgcmV0dXJuIHgqeDsKfQoKaW50IGYzKGludCB4KXsKICAgIHJldHVybiB4KngqeDsKfQoKLy9jYWNoIDEsIGR1bmcgcmVjdXJzaW9uCmludCBzdW0xKGludCBuLGZ1bmMgZil7CiAgICBpZihuPjApIHJldHVybiBmKG4pK3N1bTEobi0xLGYpOwogICAgZWxzZSByZXR1cm4gMDsKfQoKLy9jYWNoIDIsIGR1bmcgbG9vcAppbnQgc3VtMihpbnQgbiwgZnVuYyBmKXsKICAgIGludCBzPTA7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgcys9ZihpKTsKICAgIHJldHVybiBzOwp9CgovL2NhY2ggMywgZHVuZyBjb25nIHRodWMKaW50IHN1bTMoaW50IG4sIGludCBrKXsKICAgIGludCB0ZW1wPShuKihuKzEpKS8yOwogICAgc3dpdGNoKGspewoJCWNhc2UgMTogcmV0dXJuIHRlbXA7IAoJCWNhc2UgMjogcmV0dXJuIHRlbXAqKDIqbisxKS8zOwoJCWNhc2UgMzogcmV0dXJuIHRlbXAqdGVtcDsKCQlkZWZhdWx0OnJldHVybiAwOwogICAgfQp9CgovL2NhY2ggNCwgZHVuZyBiaW5hcnkgcmVjdXJzaW9uCmludCBzdW00KGludCBuZnJvbSxpbnQgbnRvLCBmdW5jIGYpewogICAgaWYgKG5mcm9tPT1udG8pIHJldHVybiBmKG5mcm9tKTsKICAgIGVsc2UgewogICAgICAgIGludCBubWlkZGxlPShudG8rbmZyb20pLzI7CiAgICAgICAgcmV0dXJuIHN1bTQobmZyb20sbm1pZGRsZSxmKStzdW00KG5taWRkbGUrMSxudG8sZik7CiAgICB9Cn0KCmludCBtYWluKCl7CiAgICBjb3V0PDxzdW0xKDMsZjIpOwogICAgcmV0dXJuIDA7Cn0K