C++ 疑问 ; 请问这个的作用是啥 还有 ret是啥

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++ 疑问 ; 请问这个的作用是啥 还有 ret是啥相关的知识,希望对你有一定的参考价值。

float daPower(float x,int n)

float ret=1,tmp;
if(n==1)return x;
tmp=daPower(x,n>>1);
ret=tmp*tmp;
if(n&1)ret*=x;
return ret;

float daPower(float x,int n)

这个代码应该是计算x的n次幂,不过写的挺乱的
ret只是一个作为返回值的临时变量而已,只是单词“return”的缩写(我是说单词return,和return语句没关系)

float ret=1,tmp;
if(n==1)return x;//如果n为1,就代表是求某个数的1次幂,一个数的1次幂肯定是这个数本身,能理解吧
tmp=daPower(x,n>>1);//如果上条语句没返回就到这里,n>>1就是右移一位,一般可以理解为n/2
ret=tmp*tmp;//上面是把n/2,可是求的还是次幂,所以要把结果再乘一次,例如x的10次幂等于,x的5次幂乘以x的5次幂,理解了吗?
if(n&1)ret*=x;//这条语句的意思是,假设n是奇数,那么再乘一边x,意思就是假设n为5,那么n>>2就为2,两个x的2次幂相乘的结果是n的4次幂,我们要求5次幂,所以这里再乘一次
return ret;

总而言之⋯⋯很莫名其妙的算法
参考技术A 这是快速幂的求法~就是求实数x的n次方是多少
ret是一个返回值,最后返回的ret就是x的n次方
举个最简单的例子:
比如我们要求2的100次方,常规做法是将2自乘100次,对吧?但这个程序只要乘7次就可以啦~(运算级别降到了log2 100这么少!)
它的运行方法是:2^100=2^50×2^50,而2^50=2^25×2^25,以此类推,那么对于2^100来说,我们只要用tmp记录一个2^50,再返回tmp*tmp就可以了(也就是上述程序的ret=tmp*tmp的作用)
再解释一下tmp=daPower(x,n>>1)的意思,n>>1的意思就是n二进制中右移一位(什么那么复杂啦,就是除以2取整数嘛!)也就起到了算2^100只要算2^50次方(50由100>>1也就是除以2得到)的作用,至于最麻烦的if(n&1)ret*=x的话嘛~就是一种特殊情况:
首先if(n&1)是判断n是不是奇数,(是把n转成了二进制,判断最后一位是否是1,是1就表示是奇数,不信你试试奇数二进制下最后一位是不是1?)如果是奇数就看下面:
比如我们算2^101,101不是偶数,不能单纯地101>>1再自乘得到,而要算出2^50,然后再自乘一个2得到,也就是2^101=(2^50)×(2^50)*2,所以有了if(n&1)ret*=x;(相当于ret=ret*x;)这一句话了~最后就返回个ret
再介绍点好玩的东西,为什么返回值是ret不是ter或者别的什么呢?因为return这个单词前三个字母就是ret!为了方便记忆说等一下我要返回值,所以很多人都把返回值用ret作变量!谢谢~
参考技术B float daPower(float x,int n)

float ret=1,tmp;
if(n==1)return x; //剩下1次方的时候,才是递归函数终止条件
tmp=daPower(x,n>>1);
ret=tmp*tmp;
if(n&1)ret*=x;
return ret;

这个函数是求 x^n,也就是x的n次方,ret就是所求的返回值,由于这个函数用了移位,和递归,理解这个算法上就需要一定的数学功底
随便举个例子
假设调用的是 float daPower(2.1, 31),也就是2.1的31次方
这个算法的过程就是
float daPower(2.1,31)

float ret=1,tmp;
if(n==1)return x; //因为 n=31,所以此分支没有进来
tmp=daPower(x,n>>1); //n>>1就是n/2,所以tmp的值就是 2.1的15次方,递归调用
ret=tmp*tmp; //ret= tmp*tmp bn就是2.1的 30次方
if(n&1)ret*=x; //因为n是31,所以此分支进入 ret*=x; 也就是2.1的31次
return ret;

请问数据仓库的作用,数据仓库在CRM中的意义是啥

  首先明晰什么是数据仓库,直白的说,数据仓库就是数据集的存储仓库,其构建方式自上而下,自下而上的紧凑步骤就不再赘述了,其数据仓库分为传统经分数据仓库和现在业务运营型数据仓库(有的场景下统称为数据中心),分层按域形成数据的层次化管理和存储,面向不同的应用接口,分层可能是基础层(数据源)、中间层(汇总)、集市层(面向主题、应用)等等,这个按企业业务需求不同划分会有差异;按域可能是客户域、产品域、账单域等等,同上。EDW的意义在于做分析决策,企业业务支撑等等。
  对于CRM我想你应该比较了解了(根据你问的问题),里面有客户基本信息、积分信息等等(具体内容不在这里列举),EDW综合这些资料信息,过滤处理,根据分析因子建立分析模型(客户保有、中高端客户细分等等),这些信息都来自类似CRM这样的业务系统。先就说到这里吧
参考技术A 数据仓库意义在于能有效的将客户数据统一运作管理。如今市面上有很多很好的crm,你可以参考一下,用友crm、zoho crm、八百客、XCRM等,这些都是名气很大的crm,他们都有体验版本的 参考技术B 立友信他们是B/S架构、J2EE开发,一处安装,到处试用,异地也能办公,无需下载,而且还支持手机办公,是款不错的客户关系管理软件。 参考技术C 数据仓库就是存储数据的,用户保存历史数据,根据历史数据来做某些决策。 参考技术D 数据仓库对CRM的意义重大,它为客户信息的保留、存储,以及后期的数据分析提供支撑平台。

以上是关于C++ 疑问 ; 请问这个的作用是啥 还有 ret是啥的主要内容,如果未能解决你的问题,请参考以下文章

linux的etc/profile文件的作用是啥

请问*.pcap文件都是啥软件产生的啊?wireshark我知道保存的文件格式是.pcap文件,请问还有别的软件吗?

java 中 package 是啥?

请问C++ 中定义范围最大的 是啥 ???

请问数据仓库的作用,数据仓库在CRM中的意义是啥

请问UC手机浏览器的系统设置里面的UA,更改UA,UA到底指的是啥?更改UA有啥作用?