递归说的是方法自身对自身的调用方式
比如递归的阶乘
#include"stdio.h"
int dg(int n);
void main(){
int n;
printf("输入n\n");
scanf("%d",&n);
printf("%d的阶乘为%d",n,dg(n));
}
int dg(int n){//递归的函数
if(n==1){//一直调用直到到达递归边界,也就是最后一个明确值
return 1;
}
else{//一直递归如果前一个问题还是未知的就在此调用
return dg(n-1)*n;
}
}
其他的还有很多,我也容纳在了一个程序里面大家可以看一下
/* Note:Your choice is C IDE */
#include "stdio.h"
int jishu1=0;
int fun1(int n);
int fun2(int n);
int fun3(int n);
int fun4(int n);
int fun5(int n,int k);
void fun6(char a[100],int n);//参数是一个数组和一个数组实际长度
int fun7(int n);
void fun8(int a[100],int k);
void main()
{
int bh;
int start,end;
int i,sum=0;
int jishu=0;
int m;//盘子个数
int n,k;
char a[100];
int c;
int b[100];
for(;;)
{
printf("\n\t\t递归专项训练\n");
printf("\t\t1.计算阶乘和\n");
printf("\t\t2.斐波那契数列\n");
printf("\t\t3.爱因斯坦台阶\n");
printf("\t\t4.汉诺塔移动\n");
printf("\t\t5.计算n的k次方\n");
printf("\t\t6.递归倒序输出字符串\n");
printf("\t\t7.递归计算数字之和\n");
printf("\t\t8.递归顺序输出数字\n");
printf("\t\t0.退出\n");
printf("请输入编号:");
scanf("%d",&bh);
switch(bh)
{
case 1:
printf("请输入起始值:");
scanf("%d",&start);
printf("请输入终止值:");
scanf("%d",&end);
for(i=start;i<=end;i++)
{
printf("%d的阶乘是%d\n",i,fun1(i));
sum=sum+fun1(i);//求和
}
printf("%d~%d的阶乘结果和是%d",start,end,sum);
break;
case 2:
for(i=1;i<=20;i++)
{
printf("%d\t",fun2(i));
jishu++;
if(jishu%5==0)//每五个一换行
{
printf("\n");
}
}
break;
case 3:
for(i=1;i<=10;i++)
{
printf("第%d个额台阶有%d个登法\n",i,fun3(i));
}
break;
case 4:
//2^n-1
printf("输入盘子的个数:");
scanf("%d",&m);
printf("至少需要移动%d次\n",fun4(m));
break;
case 5:
printf("请输入n和k的值:");
scanf("%d%d",&n,&k);
printf("%d的%d次方是%d\n",n,k,fun5(n,k));
break;
case 6:
printf("输入一个字符串:");
scanf("%s",a);
fun6(a,strlen(a)-1);
break;
case 7:
printf("请输入一个整数:");
scanf("%d",&c);
printf("和是%d",fun7(c));
break;
case 8:
printf("请输入一个整数:");
scanf("%d",&m);
fun8(a,m);
for(i=jishu1-1;i>=0;i--)
{
printf("%d\t",b[i]);
}
break;
case 0:exit(0);
default:printf("输入有误!\n");
}
}
}
int fun1(int n)
{
if(n==1)//边界条件
{
return 1;
}
else
{
return fun1(n-1)*n;//阶乘递归表达式
}
}
int fun2(int n)
{
if(n==1 || n==2)
{
return 1;
}
else
{
return fun2(n-1)+fun2(n-2);//斐波那契的递归表达式
}
}
int fun3(int n)
{
if(n==1)
{
return 1;
}
else if(n==2)
{
return 2;
}
else
{
return fun3(n-1)+fun3(n-2);//阶梯登法的递归表达式
}
}
int fun4(int n)
{
if(n==1)
{
return 1;
}
else
{
return 2*fun4(n-1)+1;//汉诺塔的递归表达式
}
}
int fun5(int n,int k)
{
if(k==1)
{
return n;
}
else
{
return fun5(n,k-1)*n;//n的k次幂的递归表达式
}
}
void fun6(char a[100],int n)
{
if(n==0)//下标为0
{
printf("%c",a[n]);
}
else
{
printf("%c",a[n]);
n--;
fun6(a,n);//调用自身
}
}
int fun7(int n)
{
int sum=0;
if(n==0)
{
return 0;
}
else
{
sum=sum+n%10;
n=n/10;
return sum+fun7(n);//递归表达式
}
}
void fun8(int a[100],int k)
{
if(k!=0)
{
a[jishu1]=k%10;
k=k/10;
jishu1++;
fun8(a,k);
}
}