时间复杂度问题求解明白

问题描述

时间复杂度问题求解明白

Int fact(int n)
{if (n<=1)
return 1;
return n*fact(n-1);
}
A. O(log2n) B. O(n) C . (a log2n) D. O(n2)
为什么是B 我不是很明白 n的阶乘按理说不是n(n-1)吗 那么时间复杂度应该是D呀

解决方案

时间复杂度可以简单看成主要工作单元的调用的次数,比如说你题的主要工作单元是:n*fact(n-1),那么实际在整个运行中,调用的次数为 n-1次,那么复杂度取 0(n)。

解决方案二:

for (i =0; i < n; i ++)
{
for(j =0; j < n; j+++)
{..................}
}

这个的复杂度才是N^2

解决方案三:

他只是一个递归,算法的复杂度并没有变

解决方案四:

时间复杂度和主要操作认定有关

递归调用成功的把 主要操作由乘法,转换为函数调用
时间复杂度没变,效率降低了

解决方案五:

 这是尾递归,相当于
while (n > 1)
r = r*n--;
return r;
所以是On
时间: 2024-09-20 18:07:12

时间复杂度问题求解明白的相关文章

关于实参与形参类型不一致问题求解

问题描述 关于实参与形参类型不一致问题求解 #include<stdio.h> #include<math.h> double e(double *u,double *v) { *u=exp(*u)*cos(*v); *v=exp(*u)*sin(*v); return ; } double ln(double *u,double *v) { *u=ln(sqrt((*u)*(*u)+(*v)*(*v))); *v=atan((*v)/(*u)); return; } double

递归算法时间复杂度

开篇前言:为什么写这篇文章?笔者目前在学习各种各样的算法,在这个过程中,频繁地碰到到递归思想和分治思想,惊讶于这两种的思想的伟大与奇妙的同时,经常要面对的一个问题就是,对于一个给定的递归算法或者用分治思想缩小问题规模的算法,如何求解这个算法的时间复杂度呢?在google过很多的博文后,感觉这些博文总结的方法,有很好优秀的地方,但是都不够全面,有感于此,笔者决定总结各家之长,作此博文,总结各种方法于此,有不足之处,欢迎各位批评指证! 在算法的分析中,当一个算法中包含递归调用时,其时间复杂度的分析会

java多态问题求解 引用方面 谢谢

问题描述 java多态问题求解 引用方面 谢谢 java中 父类的引用指向子类对象有什么用啊?父类的引用反映的又是什么呢? 解决方案 首先,多态概念的体现在于:该引用对象的行为是由它真实的子类类型决定的.其次, 父类类型的引用指向子类类型的实例,这是一种面向抽象编程的编程思想,将变量定义成抽象类型,那么对变量的使用代码可以保持不变,当客户端则根据自己需要传递该抽象类的实现.这种写法很常用,就是经典的面向抽象编程原则. 解决方案二: 你先弄清楚多态的作用,你就明白了 解决方案三: 多态就是同类事物

计算机专业教学中的若干问题的思考——“计算机问题求解课”总结

参加"CCF计算机课程改革导教班"的学习期间,由于在时间.地点.课程选择上的精心安排,度过了一段很安静,很专心的学习时间.资深教授利用有跨度的课程做出具体.深入引导,多次畅所欲言的自由研讨,以及课后无时不在的个别深度交流,对于一名热爱专业教学的教师而言,这是一段很享受的时光.我时时能想起牛津大学学院制的生活是否是这样,而这显然就是"过一种完整幸福的教育生活[ "新教育实验"的口号.新教育实验,是一个民间教育改革行动.一个以教师发展为起点,以帮助新教育共同体

旅行商问题和背包问题求解

问题描述 旅行商问题和背包问题求解 这是题目,有大神能帮我搞一下么.流程图和时间复杂度写一下,方便我学习与理解.谢大神 解决方案 旅行商问题和背包问题旅行商问题和背包问题旅行商问题和背包问题

c++-C++排队问题求解,见题目

问题描述 C++排队问题求解,见题目 题目是队伍站队:从右边开始站队,始终要让等级最高的人站在自己的右边.(就是每个人先单独出列,然后向右走,直到右边没有比自己等级高的人)举个例子: 这个队伍原先是这么站的,1324,那么从右边开始,4移动0,2移动0,3移动1,1移动0.所以步数信息就是0010. 输入 几行队伍 比如2,就表示有2行 然后接着输入 这一行有几个人,比如3个人 输入他们每个人要移动的步数. 比如 输入 2 3 001 5 01012 输出 213 32154 解决方案 题主可以

c++问题-C++问题求解,,大神进,,说一下过程

问题描述 C++问题求解,,大神进,,说一下过程 #include using namespace std; int diguimax(int a[],int n) { int f; if(n==1) return a[0]; f=diguimax(a+1,n-1); if(f>a[0]) return f; return a[0]; } int main() { int c[]={7,29,36,28,6,-5}; cout<<diguimax(c,6)<<endl; re

一步一图一代码,一定要让你真正彻底明白红黑树【转】

转自:http://blog.csdn.net/chenhuajie123/article/details/11951777 一步一图一代码,一定要让你真正彻底明白红黑树   作者:July   二零一一年一月九日 ----------------------------- 本文参考:I.  The Art of Computer Programming Volume III. Introduction to Algorithms, Second EditionIII.The Annotated

各种排序的时间复杂度

平均时间复杂度: 插入排序 O(n^2)  冒泡排序 O(n^2)  选择排序 O(n^2)  快速排序 O(n log n) 堆排序 O(n log n)  归并排序 O(n log n)  基数排序 O(n)  希尔排序 O(n^1.25)