利用 操作符特性 代替if判断语句
参考:http://blog.csdn.net/speedme/article/details/22916181
1.&&的判断特性
#include <stdio.h> int sumf(int i)
{
int sum = ;
#if 0
i && (sum = i+ sumf(i-));
#else
if(i!=){
sum = i+ sumf(i-);
}
#endif
return sum;
} int main()
{
printf("sum(%d)=%d\n",,sumf());
printf("aaaaaaaaaaaa\n");
}
用gcc编译,看起来if判断语句效率还高一点。
sumf:// if(i!=0){ sum = i+ sumf(i-1); }
pushl %ebp
movl %esp, %ebp
subl $, %esp
movl $, -(%ebp)
cmpl $, (%ebp)
je .L2
movl (%ebp), %eax
subl $, %eax
movl %eax, (%esp)
call sumf
addl (%ebp), %eax
movl %eax, -(%ebp)
.L2:
movl -(%ebp), %eax
leave
ret
sumf://i && (sum = i+ sumf(i-1));
pushl %ebp
movl %esp, %ebp
subl $, %esp
movl $, -(%ebp)
cmpl $, (%ebp)
je .L3
movl (%ebp), %eax
subl $, %eax
movl %eax, (%esp)
call sumf
addl (%ebp), %eax
movl %eax, -(%ebp)
cmpl $0, -12(%ebp)
.L3:
movl -(%ebp), %eax
leave
ret
2.另类的迭代法:::::(!的判断特性这个比较实用一点)
#include <stdio.h>
typedef unsigned int (*fun)(unsigned int); unsigned int Solution3_Teminator(unsigned int n)
{
return ;
} unsigned int Sum_Solution3(unsigned int n)
{
static fun f[] = {Solution3_Teminator, Sum_Solution3};
return n + f[!!n](n - ); //注意此处
} int sumf(int i)
{
int sum = ;
#if 0
i && (sum = i+ sumf(i-));
#else
if(i!=){
sum = i+ sumf(i-);
}
#endif
return sum;
} int main()
{
printf("Sum_Solution3(%d)=%d\n",,Sum_Solution3());
printf("sum(%d)=%d\n",,sumf());
printf("aaaaaaaaaaaa\n");
}
利用 操作符特性 代替if判断语句的更多相关文章
- java设计模——反射的应用 (利用反射来去除if判断语句)
利用反射来去除if判断语句 我的以前写的一个查分系统,就是部长让我写的那个,使用一个分发器(函数),他会根据传递进来的字符串参数调用不同的方. If(“add”.equalsIgnoreCase(fu ...
- [19/09/16-星期一] Python的运算符和条件判断语句
一.运算符 (1)算术运算符 + 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作) a = 10 + 5 计算 a = 'hello' + ' ' + 'world' 拼串 - ...
- Interview----求 1+2+...+n, 不能用乘除法、for、while if、else、switch、case 等关键字以及条件判断语句 (A?B:C)
题目描述: 求 1+2+...+n, 要求不能使用乘除法.for.while.if.else.switch.case 等关键字以及条件判断语句 (A?B:C). 分析: 首先想到的是写递归函数,但是遇 ...
- 求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)和不用循环/goto/递归输出1~100的10种写法
来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...
- C语言奇思妙想:求1+2+…+n,要求不能使用乘除法、for、while、if、else、s witch、case 等关键字以及条件判断语句(A?B:C)
来源:据说是某一年某个公司的面试题 题目:求1+2+…+n, 要求不能使用乘除法.for.while.if.else.s witch.case 等关键字以及条件判断语句(A?B:C) 分析:这题本来很 ...
- C# if判断语句执行顺序
DataTable dt = null; )//不报错,因为先执行dt != null 成立时才执行dt.Rows.Count > 0 { } && dt != null)//报 ...
- 前端笔记知识点整合之JavaScript(三)关于条件判断语句、循环语句那点事
一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力 ...
- 前端笔记之JavaScript(三)关于条件判断语句、循环语句那点事
一.条件分支语句 条件分支语句,也叫作条件判断语句,就是根据某种条件执行某些语句,不执行某些语句. JS中有三种语法是可以表示条件分支的 1.1 if……else…… 条件分支的主力语法,这个主力语法 ...
- puppet(3) 变量、数据类型、表达式、条件判断语句-if、case、selector、unless
puppet(4) 变量.数据类型.表达式.条件判断语句-if.case.selector语句 puppet变量: 1.名称必须以$开头:赋值使用=,支持追加赋值+=: 2.每个变量都有两种引用格式: ...
随机推荐
- php不同版本特性记录
最近在用php开发时项目中遇到了版本问题,特此记录下php不同版本的一些特性记录,以备忘. 一:php5.3中的新特性 1)开始支持命名空间(Namespace) 2)支持延迟静态绑定(Late St ...
- Stack trace对性能的影响
package ceshi; public class ExceptionTest { public long maxLevel = 20; public static void main(Strin ...
- java.lang.VerifyError: Inconsistent stackmap frames at branch target
-XX:-UseSplitVerifier解决. 附带网址:http://stackoverflow.com/questions/12774672/java-7-inconsistent-stackm ...
- 【蓝桥杯】入门训练 Fibonacci数列
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. ...
- HDU1181【有向图的传递闭包】
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1181 题意很简单. 有用并查集做的.我这里用传递闭包做. 有向图的传递闭包采用Floyd思想,可以判断 ...
- java实现冒泡排序,选择排序,插入排序,快速排序(简洁版)及性能测试
1.冒泡排序是排序里面最简单的了,但性能也最差,数量小的时候还可以,数量一多,是非常慢的. 它的时间复杂度是O(n*n),空间复杂度是O(1) 代码如下,很好理解. public void bubbl ...
- vs2013搭建团队版本控制 TFS、SVN
项目使用vs2013开发,之前使用过svn进行版本控制,由于长时间未使用,记录备用. 一.TFS Team Foundation Server(TFS) 是微软提供的一个团队协同办公的管理工具,项目总 ...
- python(进程池/线程池)
进程池 import multiprocessing import time def do_calculation(data): print(multiprocessing.current_proce ...
- C++的一些编程规范(基于google)
1.所有头文件都应该使用#define 防止头文件被多重包含,命名格式可以参考<PROJECT>_<PATH>_<FILE>_H 2.使用前置声明尽量减少.h文件中 ...
- 如何在自己的Activity中去控制EditText的焦点
在进入一个Activity时,如果这个Activity中有EditText,则这个EditText会自动获取焦点,然后就会弹出软键盘,这样给用户体验不是很好.所以一般会通过代码控制让EditText不 ...