遞歸:程序調用自身,大事化小
遞歸條件:
- 要有限制條件,以便跳出遞歸,以防死循環
- 每次的遞歸調用都要接近那個限制條件
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;
}