递归算法(英语:recursion algorithm)在计算机科学中是指一种通过重复将问题分解为同类的子问题而解决问题的方法。递归式方法可以被用于解决很多的计算机科学问题,因此它是计算机科学中十分重要的一个概念。绝大多数编程语言支持函数的自调用,在这些语言中函数可以通过调用自身来进行递归。计算理论可以证明递归的作用可以完全取代循环,因此在很多函数编程语言(如Scheme)中习惯用递归来实现循环。
递归例子:
(1)阶乘
n! = n * (n-1) * (n-2) * ...* 1(n>0)
//阶乘
int recursive(int i)
{int sum = 0;if (0 == i)return (1);elsesum = i * recursive(i-1);return sum;
}
(2)河内塔问题
//河内塔
void hanoi(int n,int p1,int p2,int p3)
{if(1&#61;&#61;n)cout<<"盘子从"<}
&#xff08;3&#xff09;全排列
从n个不同元素中任取m&#xff08;m≤n&#xff09;个元素&#xff0c;按照一定的顺序排列起来&#xff0c;叫做从n个不同元素中取出m个元素的一个排列。当m&#61;n时所有的排列情况叫全排列。
如1,2,3三个元素的全排列为&#xff1a;
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
//全排列
inline void Swap(int &a,int &b)
{int temp&#61;a;a&#61;b;b&#61;temp;
}
void Perm(int list[],int k,int m)
{if (k &#61;&#61; m-1) {for(int i&#61;0;i}
&#xff08;4&#xff09;斐波那契数列
斐波纳契数列&#xff0c;又称黄金分割数列&#xff0c;指的是这样一个数列&#xff1a;1、1、2、3、5、8、13、21、……
这个数列从第三项开始&#xff0c;每一项都等于前两项之和。
有趣的兔子问题&#xff1a;
一般而言&#xff0c;兔子在出生两个月后&#xff0c;就有繁殖能力&#xff0c;一对兔子每个月能生出一对小兔子来。如果所有兔子都不死&#xff0c;那么一年以后可以繁殖多少对兔子&#xff1f;
分析如下&#xff1a;
第一个月小兔子没有繁殖能力&#xff0c;所以还是一对&#xff1b;
两个月后&#xff0c;生下一对小兔子&#xff0c;总数共有两对&#xff1b;
三个月以后&#xff0c;老兔子又生下一对&#xff0c;因为小兔子还没有繁殖能力&#xff0c;总数共是三对&#xff1b;
……
依次类推可以列出下表&#xff1a;
//斐波那契
long Fib(int n)
{
if (n &#61;&#61; 0)
return 0;
if (n &#61;&#61; 1)
return 1;
if (n > 1)
return Fib(n-1) &#43; Fib(n-2);
}
&#xff08;4&#xff09;判定一系列字符串中是否有相同的内容
public class T {public static void main(String[] args) {String[] a &#61; {"a1","a2","a3","b3","c","b","33","33"};boolean b &#61; new T().fun(0, a);System.out.println(b);}public boolean fun(int n,String[] a){boolean b &#61; false;if(n &#61;&#61; a.length){b &#61; true;}else{for(int i &#61; n; i }