귀속과 비귀속 모음집
5011 단어 귀속
1. 귀환과 비귀환은 각각 n번째 피보나 계수를 구한다
#include
int fib1(int n)//
{
int i;
int f1 = 1;
int f2 = 1;
int f3 = 0;
for (i = 2; i < n; i++)
{
//
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}
int fib2(n)//
{
if (n <= 2)
{
return 1;
}
else
{
return fib2(n - 1) + fib2(n - 2);
}
}
int main()
{
int n=0;
int ret1;
int ret2;
scanf("%d",&n);
ret1 = fib1(n);
printf(" =%d
",ret1);
ret2 = fib2(n);
printf(" =%d
",ret2);
return 0;
}
2. 함수를 작성하여 n^k를 실현하고 귀속 실현을 사용
#include
int fac(int n,int k)//
{
if (0 == k)
return 1;
else if (1 == k)
return n;
else if (k > 1)
return n*fac(n, k - 1);
else
return -1;
}
int main()
{
int n, k;
int ret;
printf(" :");
scanf("%d%d",&n,&k);
if (-1 == ret)
printf(" !
");
else
ret = fac(n, k);
printf("%d",ret);
return 0;
}
3.. 귀속 함수인 DigitSum(n)을 쓰고 마이너스 정수를 입력하여 그 숫자의 합을 되돌려줍니다. 예를 들어 DigitSum(1729)을 호출하면 1 + 7 + 2 + 9를 되돌려야 합니다. 그 합은 19입니다.
#include
int DigitSum(int n)
{
if (n < 10)
{
return n;
}
else
{
return DigitSum(n / 10) + n % 10;
}
}
int main()
{
int n,i=0;
printf(" :
");
scanf("%d",&n);
int ret = DigitSum(n);
printf("%d",ret);
return 0;
}
4. 귀환과 비귀환은 각각strlen을 실현한다
#include
int MyStrlen1(char arr[])// //*str
{
int i=0;
while (arr[i]!=0)
{
i++;
}
return i;
}
int MyStrlen2(char arr[])//
{
int i = 0;
if (arr[i] != 0)//*str !='\0'
return 1 + MyStrlen2(arr+1);
else
return 0;
}
int main()
{
char arr[] ="hello world!";// char *str="hello world!";
int count1 = MyStrlen1(arr);//(str)
printf(" =%d
",count1);
int count2 = MyStrlen2(arr);
printf(" =%d
",count2);
return 0;
}
5. 귀환과 비귀환은 각각 n의 곱셈을 실현한다
#include
int Fac1(int n)//
{
int i;
int sum = 1;
if (0 == n)
return 1;
else
{
for (i = 1; i <= n; i++)
{
sum *= i;
}
return sum;
}
}
int Fac2(int n)//
{
if (0 == n)
return 1;
else
return n*Fac2(n - 1);
}
int main()
{
int n,ret1;
printf(" :
");
scanf("%d",&n);
if (n < 0)//
{
printf(" !
");
}
else
{
ret1 = Fac1(n);
printf(" =%d
", ret1);
int ret2 = Fac2(n);
printf(" =%d
", ret2);
}
return 0;
}
6. 정수의 한 자리를 인쇄하는 귀속 방식
#include
void output(int x)
{
if (x >= 10)
{
output(x / 10); //x=x/10
}
printf("%d ", x % 10);
}
int main()
{
int a;
printf(" ");
scanf("%d", &a);
output(a);
return 0;
}
7. 함수 Reverse 작성string(char * string) (귀속과 비귀속 실현) 실현: 매개 변수 문자열의 문자를 역방향으로 배열합니다.
#include
#include
void reverse_string1(char *p)
{
int len = strlen(p);//
char tmp = *p;
*p = *(p + len - 1);
*(p + len - 1) = '\0';
if (strlen(p + 1) > 1)
{
reverse_string1(p + 1);
}
*(p + len - 1) = tmp;
}
void reverse_string2(char* str)
{
char *left = str;
char *right = str + strlen(str) - 1;
char temp;
while (left <= right)
{
temp = *left;
*left=*right;
*right=temp;
right--;
left++;
}
}
int main()
{
char str[] = "hello world!";
printf(" =%s
", str);
reverse_string1(str);
printf(" =%s
", str);
reverse_string2(str);
printf(" =%s
",str);
return 0;
}
8. 한노타 문제(귀속)
#include
void move(char pos1, char pos2)//
{
printf("%c-->%c
",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()
{
int n;
printf(" :");
scanf("%d
",&n);
Hanoi(n,'A','B','C');
return 0;
}