递归的一些简单的例子,供大家参考


#include<stdio.h>




//求连续自然数之和
/*
int Sum(int x, int y)
{
if(x == y)
{
return x ;
}

return x + Sum(x + 1, y);
}


int main()
{
int b = 0;
b = Sum(1, 10);

printf("%d \n",b);

return 0;
}*/





/*
//求x0 ~ xn (x0 < xn)的阶乘
int factor(int x0, int xn)
{
if(x0 >= xn)
{
return x0;
}

return x0 * factor(x0 + 1, xn);
}




int main()
{
int b = 0;
b = factor(1, 6);

printf("%d \n",b);

return 0;


}*/
///


// 字符 的全排列
/*
void swap(char* a, char* b, char c)
{
c = *a;
*a = *b;
*b = c;
}


void Permutation(char *list, int i, int n) 
{
int j, temp;
if(i == n)
{
for(j = 0; j<= n; j++)
{
printf("%c", list[j]);
}
printf("\n");
}

else
{
for(j = i; j <= n; j++)
{
swap(&list[i], &list[j],temp) ;
Permutation(list, i+1, n) ;
swap(&list[i], &list[j], temp);
}
}
}
int main()
{
char list[7] = {'a', 'b', 'c', 'd', 'e', 'f', 'g'};
Permutation(list, 0, 2);

return 0;


}*/





//猴子吃桃
/**************************************
小猴子第一天摘下若干桃子,
当即吃掉一半,又多吃一个.
第二天早上又将剩下的桃子吃一半,又多吃一个.
以后每天早上吃前一天剩下的一半另一个.
到第10天早上猴子想再吃时发现,只剩下一个桃子了.
问第一天猴子共摘多少个桃子?
****************************************/




/*
int fruit(int begin, int times)
{
if(times == 10)
{
return begin;
}

printf("b = %d\n",begin);
return fruit((begin + 1) * 2, times +1);
}


int main()
{
int b = 0;
b = fruit(1, 2);
printf("b = %d\n",b);

return 0;

} */







//求两个数的最大公约数与最小公倍数
/*
int fgongyue(int m, int n)
{
if(n == 0)
{
return m;
}

return fgongyue(n, m % n);
}


int main()
{
int a = 27, b = 24;
int result = fgongyue(a, b);
int result1 = a * b / result;
printf("最大公约数: %d\n",result);
printf("最小公倍数: %d\n",result1);
return 0;
}*/





//角谷定理


/************************************
角谷定理。输入一个自然数,若为偶数,则把它除以2,
若为奇数,则把它乘以3加1。经过如此有限次运算后,
总可以得到自然数值1。求经过多少次可得到自然数1。
 如:输入22,  
 输出 22  11  34  17  52  26  13  40  
  20  10  5  16  8  4  2  1 
 
  step = 16;
*************************************/


/*
int i = 0;
int jiaogu(int n) 
{
if(n == 1)
{
printf("%d",n);
i++;
return i;
}
else if(n %2 == 0)
{
i++;
printf("%d ",n);
return jiaogu(n/2);
}
else
{
i++;
printf("%d ",n);
return jiaogu(n * 3 + 1);
}
}


int main()
{
int number;
int count = 0;
printf("请输入一个数: \n");
scanf("%d",&number);
count = jiaogu(number);

printf("需要 %d 次运算\n",i);

return 0;
}*/


///


//十进制转二进制
/*
int change(int num)
{
if(num == 1)
{
printf("%d", num);
return 0;
}
change(num / 2); //12, 6, 3, 1
printf("%d",num % 2); // 0, 0, 1, 1
return 1;
}


int main()
{

int number;
printf("输入一个十进制数: \n");
scanf("%d", &number);
printf("二进制输出: \n");
change(number);
printf("\n");
return 0;
}*/


///


//计算题
/********************************************
计算M=max(a,b,c)/[max(a+b,b,c)*max(a,b,b+c)],
其中a,b,c由键盘输入
********************************************/
//总感觉不对劲 求高手!!!!!!!!!
/*
double Max(double x, double y, double z)
{
return (x > y? x : y) > z? (x > y? x : y) : z;

// return Max(x, y, z) / (Max(x + y, y, z) * Max(x , y, y + z));


}


double result(double xx, double yy, double zz)
{

double m1 = Max(xx, yy, zz);
double m2 = Max(xx + yy, yy, zz);
double m3 = Max(xx, yy, yy + zz);

return m1 / (m2 *m3);
}


int main()
{
double a, b, c;
printf("请输入三个数:\n");
scanf("%lf %lf %lf", &a, &b, &c);
printf("%f\n",result(a, b, c));
return 0;
}*/





//走楼梯
/*************************************
梯有N阶,上楼可以一步上一阶,也可以一次上二阶。
编一个程序,计算共有多少种不同的走法。
  return 1+(fc(n-1)+fc(n-2)
**************************************/
/*
int ladder(int n)
{
if(n == 1)
{
//printf("%d ",n);
return n;
}
else if(n == 2)
{
// printf("%d ",n);
return 2;
}


return ladder(n - 1) + ladder(n - 2); // n=4 ladder(3) +ladder(2) = ? + 2
// ladder(3) =ladder(2)+ladder(1) = 3
}


int main()
{
int num = ladder(5);
printf("%d\n",num);

return 0;
}*/


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值