1暴力计数递归
#include<stdio.h>
int sum;
void digui(int n)
{
for (int i = 1; i <= n / 2; i++)
{
sum++;
digui(i);
}
}
int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
sum = 1;
digui(n);
printf("%d\n", sum);
}
return 0;
}
//精简版
int digui(int n)
{
int sum = 1;
for (int i = 1; i <= n / 2; i++)
sum += digui(i);
return sum;
}
2直接递归
//n%2==0时,f(n)=f(n-1)+f(n/2);n%2==1时,f(n)=f(n-1)
int digui(int n)
{
if (n == 1)return 1;
else if (n % 2 == 1)return digui(n - 1);
else return digui(n / 2) + digui(n - 1);
}
3数组记忆
int a[100];
int diguis(int n)
{
int ans = 1;
if (a[n] > 0)return a[n];
for (int i = 1; i <= n / 2; i++)
ans += diguis(i);
a[n] = ans;
return ans;
}