- 論壇徽章:
- 0
|
比如mypow(x, ,第一次循環(huán)算出x·x=x2,第二次循環(huán)算出x2·x2=x4,第三次循環(huán)算出4·x4=x8。這樣只需要三次循環(huán),時(shí)間復(fù)雜度是Θ(lgn)。思考一下如果n不是2的整數(shù)次冪應(yīng)該怎么處理。請分別用遞歸和循環(huán)實(shí)現(xiàn)這個(gè)算法。- #include<iostream>
- using namespace std;
- //遞歸法
- double myPow(double x,int n){
- int y=0;
- if(n==1)return x;
- y=n/2;
- if((2*y)==n)
- return myPow(x,n/2)*myPow(x,n/2);
- else
- return x*myPow(x,(n-1)/2)*myPow(x,(n-1)/2);
- }
- //循環(huán)法
- double myPow2(double x,int n){
- if(n==1)return x;
- int y=1,b=2,a=0;
- while(n>b){
- b*=2;
- y++;
- }
- if(n!=b){
- y--;
- a=n-b/2;
- }
- double product=x*x;
- while(--y){
- product*=product;
- }
- while(a--){
- product*=x;
- }
- return product;
- }
- int main(){
- cout<<myPow2(2,8)<<endl;
- }
復(fù)制代碼 |
|