硬币塔问题,WA了,实在找不出来了,暴风哭泣,如何解决?

硬币塔问题

一个k级硬币塔从下到上,由1个银币,一个k-1级硬币塔,k个金币,一个k-1级硬币塔,1个银币堆成。0级硬币塔只有一个金币。问n级硬币塔从下向上数i个有几个金币。
0<=n<=40
例:
输入 5 13
输出 6
(我案例的输出不知道为什么都是错的)

我的代码
#include<stdio.h>
long long int counthang(int n);
long long int count(int n);
void jilu(int n,long long int i,long long int *sum);
int main() 
{ 
    long long int i,sum=0;
    int n;
    scanf("%d %lld",&n,&i);
    jilu(n,i,&sum);
    printf("%lld",sum);
    return 0; 
}
long long int counthang(int n)
{
    if(n==0)
    return 1;
    else
    return 3+2*counthang(n-1);
}
long long int count(int n)
{
    if(n==0)
    return 1;
    else 
    return n+2*count(n-1);
}
void jilu(int n,long long int i,long long int *sum)
{
    if(i<=n)
    {
        *sum+=0;
    }
    else 
    {
        long long int num=counthang(n);
        if(i>=num-n)
        {
            *sum+=count(n);
        }
        else if(i>num/2)
        {
            *sum+=count(n-1)+n;
            jilu(n-1,i-num/2-1,sum);
        }
        else
        {
            jilu(n-1,i-1,sum);
        }
    } 
}

运行结果及报错内容

img

你的划分位置不对,这样会漏算金币。
1 | k-1 | k | k-1 | 1
或许按这个划分成五个区间更合适