元武 发表于 2021-10-16 16:19:57

循环i=1.0/(i+2)引起的时间超限

#include<stdio.h>
int main(){
        float f,sum=1.0,i=1.0;
        int k=-1;
        while(scanf("%f",&f)!=EOF){
                while(i>=f){
                        i=1.0/(i+2);
                        sum+=i*k;
                        k=-k;
                }
                i=1.0;
                k=-1;
                printf("%.4f\n",sum*4);
                sum=1.0;
        }
       
        return 0;
}

其中的i=1.0/(i+2)如果写出i+=2;sum+=1.0/i;就不会超限,具体代码如下:‘
#include<stdio.h>
int main(){
        float f,sum=1.0,i=1.0;
        int k=-1;
        while(scanf("%f",&f)!=EOF){
                while(1.0/i>=f){
                        i+=2;//这个要分开些
                        sum+=1.0/i*k;
                        k=-k;
                }
                i=1.0;
                k=-1;
                printf("%.4f\n",sum*4);
                sum=1.0;
        }
       
        return 0;
}

请问代码1的时间复杂度为什么大于代码2;

元武 发表于 2021-10-16 16:20:43

#include<stdio.h>
int main(){
        float f,sum=1.0,i=1.0;
        int k=-1;
        while(scanf("%f",&f)!=EOF){
                while(1.0/i>=f){
                        i+=2;//这个要分开些
                        sum+=1.0/i*k;
                        k=-k;
                }
                i=1.0;
                k=-1;
                printf("%.4f\n",sum*4);
                sum=1.0;
        }
       
        return 0;
}
第二个代码忘换格式了
页: [1]
查看完整版本: 循环i=1.0/(i+2)引起的时间超限