首页 > 其他分享 >递归

递归

时间:2023-05-03 22:35:14浏览次数:21  
标签:count 递归 int 二进制 之数 include 寒月

当寒月还在读大一的时候,他在一本武林秘籍中发现了神奇的二进制数( 秘籍名:计算机基础 ) 如果一个正整数表示成二进制,它的位数为n(不包含前导0),寒月称它为一个n二进制数,所有的n二进制数中,1的总个数被寒月称为n对应的月之数。 例如,3二进制数总共有4个,分别是4(100)、5(101)、6(110)、7(111),它们中1的个数一共是1+2+2+3=8,所以3对应的月之数就是8。 输入:一个整数T,表示输入数据的组数,接下来T行,每行包含一个正整数 n(1<=n<=20) 输出:对于每个n ,在一行内输出n对应的月之数 

#include <stdio.h>     //穷举法求月之数
#include <windows.h>
int iCount(int n){     //计算n的二进制表示中1的个数
	int count=0;
  while(n){
  	if(n%2==1)
    	count++;
    n=n/2;
  }return count;
}
void moonNum(int f[]){     //计算n的二进制分别对应的月之数
	int n,i,k,count;
  f[1]=1;
  for(n=2;n<=20;n++){
  	count=0;
    for(i=1<<(n-1);,k=1<<n;i<k;i++)
    	count=count+iCount(i);
    f[n]=count;
  }
}
int main(){
	int f[21],i;
	long long start,end;
  start=GetTickCount();     //Windows API,获得毫秒为单位的开机时间
  moonNum(f);
  for(i=1;i<=20;i++)
  	printf("%d\n",f[i]);
  end=GetTickCount();
  printf("%d\n",end-start);
  return 0;
}
#include <stdio.h>    //递归法求月之数
#include <windows.h>
int main(){
	int f[21],i;
  long long start,end;
  start=GetTickCount();
  f[1]=1;
  for(i=2;i<=20;i++)
  	f[i]=2*f[i-1]+(1<<(i-2));
  //或者:
  //int k=1;
  //for(i=2;i<=20;i++){
  //	f[i]=2*f[i-1]+k;
  //	k=k*2;
  //}
  for(i=2;i<=20;i++)
  	printf("%d\n",f[i]);
  end=GetTickCount();
  printf("%d\n",end-start);
  return 0;
}

标签:count,递归,int,二进制,之数,include,寒月
From: https://blog.51cto.com/u_16036037/6241549

相关文章

  • 递归
    一个人写了9封不同的信及相应的9个不同的信封,他把这n封信都装错了信封,问都装错信封的装法有多少种? 若1 2 3 4为正确排列,则所有元素均不在正确位置的排列称之为错排 #include<stdio.h>intmain(){ intn,i;scanf("%d",&n);intf[n+1];f[1]=0;f[2]=1;for(i......
  • 递归
    有2N张牌,编号为1,2,3..n,n+1,..2n,通过一次洗牌可以把牌的序列变为 n+1,1,n+2,2,n+3,3,n+4,4..2n,n可以证明,对于任意自然数N,都可以在经过M次洗牌后第一次重新得到初始的顺序。编程对于小于100000的自然数N,求出M的值。输入:每行一个整数N输出:输出与之对应的M输入样例:201输出样例:......
  • 循环?还是递归?
    前言前几天群里有几个小伙伴,展开了如下讨论:--------------------------------------------------------------------------【西安-Java-小白】    谁遇上过?【杭州-Java-JOEL】    你要打断点看哪行出错......
  • 【web 开发基础】PHP 中的递归函数
    前言什么是递归?递归做为一种算法在程序设计语言中广泛应用。所谓的递归简单地概括就是程序调用自身的编程技巧称为递归(recursion)。递归在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学......
  • HJ89 24点运算 用递归生成器进行数列穷举
    思路:1、对4张牌进行全排序,并输出列表2、分别对排序进行计算尝试,采用穷举方式3、返回结果除了用递归生成器进行数组全排序外,也用模块fromitertools importpermutations,进行全排序。1#输出算式运算顺序从左至右运算,不需要括号确定优先级。23#列举所有排序方式,比如......
  • 线索化二叉树的递归算法
    //线索化二叉树的递归算法#include<stdio.h>#include<malloc.h>typedefstructBiTNode{intdata;structBiTNode*lchild,*rchild;//存储二叉树的左孩子和右孩子}BiTNode,*BiTree;typedefstructThreadNode{intdata;structThreadNode*......
  • Java根据Integer数组(有null值)递归构造二叉树
    二叉树:publicclassTreeNode{intval;TreeNodeleft;TreeNoderight;TreeNode(){}TreeNode(intval){this.val=val;}TreeNode(intval,TreeNodeleft,TreeNoderight){this.val=val;this.l......
  • 递归
     /*一:字符串反转1code2原理图*/ 一:字符串反转1codedeftraverse(s):print(s)iflen(s)==0:returnsreturntraverse(s[1:])+s[0]if__name__=='__main__':s="abcd"s1=traverse(s)print......
  • hdoj 展开字符串 1274 (字符串递归) 好题
    展开字符串TimeLimit:2000/1000MS(Java/Others)   MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):2116   AcceptedSubmission(s):1017ProblemDescription在纺织CAD系统开发过程中,经常会遇到纱线排列的问题。该问题的描述是这样的......
  • 递归实现三类枚举
    ​1.递归实现组合类枚举组合类枚举:从n中选s个数的所有组合n=0m=0defdfs(u:int,s:int,state:int):ifs==m:foriinrange(0,n):ifstate>>i&1:print(i+1,end='')print(""......