利用 操作符特性 代替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.每个变量都有两种引用格式: ...
随机推荐
- Dojo实现Tabs页报错(二)
- html 表头固定
<div style="width: 100%; min-width: 300px; padding-right: 10px;"> <table style=&q ...
- 5.4.1 RegExp实例属性
RegExp的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息. 1.global:布尔值,表示是否设置了 g 标志. 2.ignoreCase:布尔值,表示 ...
- [LeetCode]题解(python):073-Set Matrix Zeroes
题目来源: https://leetcode.com/problems/set-matrix-zeroes/ 题意分析: 输入一个m×n矩阵,如果出现有0,那么将对应的行和列都变成0. 题目思路: 简 ...
- python自学笔记(十一)关于函数及书写格式
1.函数是抽象的第一步 1.1 有关高压锅 1.2 函数是抽象出来的结构,是总结,是方法 1.3 多用函数 2.如何定义函数 2.1 def是关键词, ...
- Springmvc异步上传文件
<script src="js/jquery.js" type="text/javascript"></script><scrip ...
- ORA-20000:ORU-10027:buffer overflow,limit of 10000 bytes错误4
今天再测试一个存储过程时,用DBMS_OUTPUT.PUT_LINE输出时,报 ORA-20000:ORU-10027:buffer overflow,limit of 10000 bytes SQL ...
- Android手机安全软件的恶意程序检测靠谱吗--LBE安全大师、腾讯手机管家、360手机卫士恶意软件检测方法研究
转载请注明出处,谢谢. Android系统开放,各大论坛活跃,应用程序分发渠道广泛,这也就为恶意软件的传播提供了良好的环境.好在手机上安装了安全软件,是否能有效的检测出恶意软件呢?下边针对LBE安全大 ...
- poj 2153 Rank List(查找,Map)
题目链接:http://poj.org/problem?id=2153 思路分析: 判断Li Ming的成绩排名,需要在所有的数据章查找成绩比其高的人的数目,为查找问题. 查找问题可以使用Hash表, ...
- js数组练习
//查找数组对象中 age 大于 18 对象 function filterAdult(arr) { return arr.filter(function(item, index, array) { ...