1.递归
(1)阶乘函数举例
int factorial(int n){
if(n==0)
return 1;
else
return n*factorial(n-1);
}
(2)斐波那契数列
int fibonacci(int n){
if(n==0||n==1)
return 1;
else return fibonacci(n-1)+fibonacci(n-2);
}
(3)Ackerman函数
int ackerman(int n,int m){
if(n==1&&m==0)
return 2;
else if(n==0)
return 1;
else if(n!=0&&m==0)
return n+2;
else return ackerman(ackerman(n-1,m),m-1) ;
}
(4)排列问题
void swap(int *a,int *b){
int temp=*a;
*a=*b;
*b=temp;
}
void perm(int data[],int k,int m){
if(k==m)
for(int i=0;i<=m;i++){
printf("%d ",data[i]);
if(i==m)
printf("\n");
}
else
for(int i=k;i<=m;i++){
swap(&data[k], &data[i]);//提到前面
perm(data,k+1,m);//后面的进行全排列
swap(&data[k], &data[i]);//还原数组,避免重复
}
}
(5)整数划分问题
#include <stdio.h>
/*
* 整数划分问题
*/
int integer_div(int n,int m){
if((n<1)||(m<1))
return 0;
if((n==1)||(m==1))
return 1;
if(n<m)
return integer_div(n,n);
if(n==m)
return integer_div(n,m-1)+1;
return integer_div(n,m-1)+integer_div(n-m,m);//如和为6,找不大于4的个数,即只需找最大值为4和小于4的个数之和即可,最大值为4就是找和为(6-4)=2的
}
int main(){
int n;
scanf("%d",&n);
int result=integer_div(n,n);
printf("%d",result);
}