Computer science 探索一个数可以表示为2的幂和的不同方法

Computer science 探索一个数可以表示为2的幂和的不同方法,computer-science,combinatorics,discrete-mathematics,Computer Science,Combinatorics,Discrete Mathematics,定义f0=1和fn为不同方式的数量n可以表示为2的整数次幂之和,每个次幂不超过两次。例如,f10=5,因为有五种不同方式表示10: 1+1+8 1+1+4+4 1+1+2+2+4 2+4+4 2+8 对于给定的n,fn是什么。你可以使用任何计算机语言 import math def powOfTwo(n): i=0 while(pow(2,i)<=n): if (pow(2,i)==n): return True el

定义f0=1和fn为不同方式的数量n可以表示为2的整数次幂之和,每个次幂不超过两次。例如,f10=5,因为有五种不同方式表示10:

1+1+8 1+1+4+4 1+1+2+2+4 2+4+4 2+8 对于给定的n,fn是什么。你可以使用任何计算机语言

import math
def powOfTwo(n):
    i=0
    while(pow(2,i)<=n):
        if (pow(2,i)==n):
            return True
        else:
            i=i+1
    return False

def noWays(n):   
    if n==1:
        return 1
    elif n==0:
        return 0
    else:
        if (n%2==0):
            if (powOfTwo(n-2) and n-2!=2):                
                return (1+noWays((n-2)/2)+noWays(n/2))
            else:
                return (noWays((n-2)/2)+noWays(n/2))
        else:
            if (powOfTwo(n-1)and n-1!=2):
                return (1+noWays((n-1)/2))
            else:
                return (noWays((n-1)/2))
n=int(input())
v=noWays(n)
print(v)

通常,对于这类谜题,你只需要以不同的方式提问即可

给定一个起始数,有多少种方法可以通过减去二的幂将其转换为零?您可以将每个数字减去0、1或2次

使函数签名采用以下参数:

n:你要转换成零的数字 p:你可以减去的最小数目 算法如下所示。打字

function pathsToZero(n: number, p:number) : number {
     if(n === 0) {
        // We've hit the target!
        return 1;
     }
     if(n < p) {
        // This will only be negative. No point in continuing
        return 0;
     }
     return pathsToZero(n, p*2) + pathsToZero(n-p, p*2) + pathsToZero(n-p*2, p*2);
} 


let resultForTen = pathsToZero(10, 1);

stackoverflow不是这样工作的。至少让我们看看你尝试了什么。我已经编辑了这个问题,现在你可以看到我的代码。如果我在这里设置f0=1,那么这个代码将不起作用。