B2147 求 f(x,n)
题目分析
根据公式狠狠推理:
1. n在每一次开放运算递减
2. 当 n==1 开放的对象为 1+x
3. 当 n==0 题目无定义 则返回值为 0
4. 综上 我们采用递归实现(当然递推也可以~)
#include<stdio.h>
#include<math.h>
double calc(int x,int n){
if(n==0) return 0;
if(n==1) return sqrt(1+x);
return sqrt(n+calc(x,n-1));
}
int main()
{
int x,n;
scanf("%d %d",&x,&n);
double num = calc(x,n);
printf("%.2f",num);
return 0;
}
力扣 231 2的幂次方
给你一个整数
n
,请你判断该整数是否是 2 的幂次方。如果是,返回true
;否则,返回false
。如果存在一个整数
x
使得n == 2x
,则认为n
是 2 的幂次方。示例 1:
输入:n = 1 输出:true 解释:20 = 1示例 2:
输入:n = 16 输出:true 解释:24 = 16示例 3:
输入:n = 3 输出:false示例 4:
输入:n = 4 输出:true示例 5:
输入:n = 5 输出:false提示:
-231 <= n <= 231 - 1
题目分析
根据题目数据范围,直接使用for循环判断 是会超时的;此时则需要运行递归的思想
由于是判断2的幂次方 我们每一次递归执行的操作都是n/2
而函数里的n 则有三种情况参与判断中 —— 1.n==0 2.n==1 3.n%2!=0
bool isPowerOfTwo(int n){
if(n<=0) return false;
if(n==1) return true;
if(n%2!=0)return false;
// 递归
return isPowerOfTwo(n/2);
}