蓝桥杯:递归求二进制表示位数
问题描述 给定一个十进制整数,返回其对应的二进制数的位数。例如,输入十进制数9,其对应的二进制数是1001,因此位数是4。 样例输入输出 输入 9 输出 4 思路 题目不难,你可以直接对n求对数log 2 n 然后得到结果 ↓ # include <iostream> # include <cmath> using namespace std ; # define log2(x) ((int)(log(x)/log(2))) int main ( ) { int n ; cin >> n ; cout << log2 ( n ) + 1 << endl ; return 0 ; } 但是重点是用 递归的思维 去解决 二进制对应的是一颗二叉树,它的深度就是二进制数的位数 深度为1的层能够表示的数是0,1,这就意味着0,1的二进制长度就是1 同理深度为2的层,能够表示2,3 深度为3:4,5,6,7 深度为4:8,9,10,11,12,13,14,15 对于数字x,想要求它的二进制长度,就是求它在二进制树中能有多深 对于x,x/2必定在树的上一层 这就意味着【数字x的二进制数的长度】是【x/2的二进制数长度】+1 于是可以定义递推式: len ( x ) = len ( x / 2 ) + 1 边界条件:x=0 或 x=1,此时长度为1 完整的递归函数: int binary_len