递归:程序调用自身,大事化小
递归条件:
- 要有限制条件,以便跳出递归,以防死循环
- 每次的递归调用都要接近那个限制条件
1、接受一个无符号整形值,把它转换为字符并打印它
例如:12345 —-> 1 2 3 4 5
//1234 5
//123 4 5
//12 3 4 5
//1 2 3 4 5
#include<stdio.h>
int fun(num)
{
if(num>9)
{
fun(num/10);
}
printf("%d ",num%10);
}
int main()
{
int num=12345;
fun(num);
return 0;
}
2、不创建临时变量,求字符串长度
#include<stdio.h>
int Strlen(const char *str)
{
if(*str=='\0')
return 0;
else
return 1+Strlen(str+1);
}
int main()
{
char *p="qweasd";
int len=Strlen(p);
printf("len=%d\n",len);
return 0;
}
3、求N的阶乘
#include<stdio.h>
int factorial(n)
{
if(n<=1)
return 1;
else
return n*factorial(n-1);
}
int main()
{
int n=5;
int ret = factorial(n);
printf("%d\n",ret);
return 0;
}
4、求第N个斐波那契数 1 1 2 3 5 8 13…
#include<stdio.h>
int fib(n)
{
if(n<=2)
return 1;
else
return fib(n-1)+fib(n-2);
}
int main()
{
int n=10;
int ret=fib(n);
printf("%d\n",ret);
return 0;
}
5、编写一个指数函数,实现n^k
#include<stdio.h>
#define a 3
#define b 5
int Index(int n,int k)
{
if(k==1)
return n;
else
return n * Index(n,k -1);
}
int main()
{
int n=a;
int k=b;
printf("%d\n",Index(n,k));
return 0;
}
6、写一个递归函数DigitSum(n),输入一个非负整数,返回组成它的数字之和,
例如,调用DigitSum(2017),则应该返回2+0+1+7,它的和是10
#include<stdio.h>
int DigitSum(int n)
{
if(n<10)
return n;
else
return ((n % 10) + DigitSum(n / 10));
}
int main()
{
int num=2017;
int ret=DigitSum(num);
printf("ret=%d\n",ret);
return 0;
}
7、整数n的数字根如下定义:它是一个整数的所有数字的和,反复相加,直到只剩下一位数字为止:
- 2018—–>2+0+1+8=11
- 11 —–>1+1=2
#include<stdio.h>
int DigitalSum(int n)
{
if(n<10)
return n;
else
return (n%10)+(DigitalSum(n/10));
}
int DigitalRoot(int n)
{
if(n<10)
return n;
else
return DigitalRoot(DigitalSum(n));
}
int main()
{
int num=2018;
printf("%d\n",DigitalRoot(num));
return 0;
}
8、编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列
#include<stdio.h>
#include<assert.h>
int my_strlen(const char *p)
{
assert(p);
if (*p == 0)
return 0;
else
return 1 + my_strlen(++p);
}
char *reverse_string(const char* p)
{
assert(p);
char *ret = p;
if (*p != '\0')
{
reverse_string(++p);
}
printf("%c", *ret);
}
int main()
{
char arr[] = "abcd1234";
reverse_string(arr);
printf("\n");
system("pause");
return 0;
}