递归满足2个条件:
1)有反复执行的过程(调用自身)
2)有跳出反复执行过程的条件(递归出口)
递归例子:
(1)阶乘
n! = n * (n-1) * (n-2) * ...* 1(n>0)
//阶乘
int recursive(int i)
{
int sum = 0
if (0 == i)
return (1)
else
sum = i * recursive(i-1)
return sum
}
(2)河内塔问题
//河内塔
void hanoi(int n,int p1,int p2,int p3)
{
if(1==n)
cout<<"盘子从"<<p1<<"移到"<<p3<<endl
else
{
hanoi(n-1,p1,p3,p2)
cout<<"盘子从"<<p1<<"移到"<<激早p3<<endl
hanoi(n-1,p2,p1,p3)
}
}
(3)全排列
从n个不明手雀同元素中任取m(m≤n)个元素薯册,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
如1,2,3三个元素的全排列为:
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=a
a=b
b=temp
}
void Perm(int list[],int k,int m)
{
if (k == m-1)
{
for(int i=0i<mi++)
{
printf("%d",list[i])
}
printf("n")
}
else
{
for(int i=ki<mi++)
{
Swap(list[k],list[i])
Perm(list,k+1,m)
Swap(list[k],list[i])
}
}
}
递归算法,主要要知道递归出口在哪里,当问题出现循环嵌套,感觉一直套不玩的那种题一般就用上递归算法了悄脊,
想阶乘不一定要用递归,用递归出口也更好找,出口股市变量减到1
首先输入启判渗一个数n,
定义一个存储结冲让果的s=1
判断数n是不是1,不是就进行循环运算,
S=n*(n-1)
N--
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)