递归
来源:互联网 发布:阿里巴巴比淘宝 编辑:程序博客网 时间:2024/06/06 06:37
我在程序中写下这么一些代码求n!
#include "stdafx.h"#include <iostream.h>int fun(int n){if (n==1)//递归有个规则,就是需要一个递归出口,要不就会永远的//递归下去了{return 1;}return fun(n-1)*n; }int main(int argc, char* argv[]){int n=5;cout<<fun(5)<<endl;return 0;}
求斐波那契数列1 1 2 3 5 8 13 21 34 55....
#include "stdafx.h"#include <iostream.h>int fun(int n){if (n==1||n==2){return 1;}return fun(n-1)+fun(n-2); }int main(int argc, char* argv[]){int n=10;//求的是第10个数是几?cout<<fun(n)<<endl;return 0;}
求1+2+3+4+5+6+.....+n
#include "stdafx.h"#include <iostream.h>int fun(int n){if (n==1){return 1;}return fun(n-1)+n; }int main(int argc, char* argv[]){int n=100;cout<<fun(n)<<endl;return 0;}
但是这样求的话就太笨了!知道高斯的人都应该知道他是怎么求这个数列的n*(n+1)/2;引出这个例子只是为了说明递归的缺点。递归虽然简单易用,但是他并不高效。深层次的递归会涉及到频繁进栈出栈和分配内存空间,所以运行效率比较低,当问题规模较大时,不推荐使用。在递归过程中,每次调用中的参数,方法返回点,局部变量都是存放在堆栈中的,如果当问题规模非常大时,容易造成堆栈溢出。算法时间复杂度也是最笨的。但是递归算法更加通俗易懂,并且代码量也是大大的减少
写一个是十进制转二进制的递归写法结束此篇文章
#include "stdafx.h"#include <iostream.h>void ConvertToBinary(int num) { if (num==1) {cout<<1;return;}ConvertToBinary(num/2); cout<<(num%2);return;}int main(int argc, char* argv[]){int n=97;ConvertToBinary(n);cout<<endl;return 0;}