递归求n!
#include<stdio.h>
int Function(n)
{
if (n == 1)
{
return 1;
}
return n*Function(n - 1);
}
int main()
{
int n = 0;
scanf("%d", &n);
int ret = Function(n);
printf("(%d)!=%d\n",n, ret);
return 0;
}
汉诺塔
/*
1 A==>C 1
2 A==>B A==>C B==>C 3
3 A==>C A==>B C==>B A==>C B==>A
B==>C A==>C 7
4
64 2^64-1
*/
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
void Move(char pos1, char pos2)
{
printf("%c-->%c\n", pos1, pos2);
}
void Hanoi(int n, char pos1, char pos2, char pos3)
{
if (n == 1)
{
Move(pos1, pos3);
}
else
{
Hanoi(n - 1, pos1, pos3, pos2);
Move(pos1, pos3);
Hanoi(n - 1, pos2, pos1, pos3);
}
}
int main()
{
Hanoi(12, 'A', 'B', 'C');
return 0;
}
逆置输出字符数组
1、递归
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h> void reverse_string(char *p)
{
int len = strlen(p);
char tmp = *p;
*p = *(p+len-1);
*(p+len-1) = '\0';
if(strlen(p+1) > 1)
{
reverse_string(p+1);
}
*(p+len-1) = tmp;
}
int main()
{
char str[80];
scanf("%s", str);
printf("%s\n",str);
reverse_string(str);
printf("%s\n",str);
return 0;
}
2、非递归
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void reverse_string(char *str)
{
char *left = str;
char *right = str + strlen(str) - 1;
while (left < right)
{
char tmp = *left;
*left = *right;
*right = tmp;
left++;
right--;
}
}
int main()
{
char str[80];
scanf("%s", str);
printf("%s\n", str);
reverse_string(str);
printf("%s\n", str);
return 0;
}
不用库函数求字符串长度
1、非递归法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
#include<assert.h>
int MyStrlen1(char *str)
{
int count = 0;
assert(str != NULL);//断言 DEBUG 不是函数 是宏,断言str不为NULL,如果是NULL,程序就不会执行下去
while (*str != '\0')
{
count++;
str++;
}
return count;
}
int main()
{
char *str = "abcdef";
int len = MyStrlen(str);
printf("%d\n",len);
return 0;
}
2、递归法
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int MyStrlen(char *str)
{
if (*str == '\0')
{
return 0;
}
else
{
return 1 + MyStrlen(str + 1);
}
}
int main()
{
char *str = "abcdef";
int len = MyStrlen(str);
printf("%d\n",len);
return 0;
}
递归打印整数的每一位
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
void Print(int n)
{
if (n > 9)
{
Print(n / 10);
}
printf("%d ", n % 10);
}
int main()
{
int n = 0;
scanf("%d", &n);
Print(n);
return 0;
}
求一个数每一位数字之和
例如:1278----->1+2+7+8=18
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<string.h>
int DigitSum(int n)
{
if (n < 10)
{
return n;
}
else//14 123
{
return DigitSum(n / 10) + n % 10;
}
}
int main()
{
int n = 0;
scanf("%d", &n);
int res = DigitSum(n);
printf("%d\n",res);
return 0;
}