第一题
存在限制条件,当满足这个限制条件的时候,递归便不再继续
每次递归调用之后越来越接近这个限制条件
递归层次太深,会出现栈溢出现象
第二题
解析
1 – 2*Fun3 2*2*2*2
2 – 2*Fun4 = 2*2*2
3 – 2*Fun5 2*2
4 – return 2
所以返回值为4
第三题
第四题逆序打印字符串
方法一
void reverse(char arr[])
{
int left = 0;
//int right = sz - 2;
int right = strlen(arr) - 1;
while (left < right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
left++;
right--;
}
}
int main()
{
char arr[] = "abcdef"; // a b c d e f \0
//int sz = sizeof(arr) / sizeof(arr[0]); //函数内部不行
reverse(arr);
printf("%s\n", arr);
return 0;
}
用函数的时候,sz 只能在函数外计算,否则出错
strlen()打印的字符串的长度,不包含’\0′
方法二:递归的方式逆序打印字符串(一个参数)
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char* str)
{
char tmp = *str; //1
int len = my_strlen(str);
*str = *(str + len - 1); // 2
*(str + len - 1) = '\0';//3
if (my_strlen(str+1) >= 2)
{
reverse(str + 1);//4
}
*(str + len - 1) = tmp;
}
int main()
{
char arr[] = "abcdef"; // a b c d e f \0
//int sz = sizeof(arr) / sizeof(arr[0]); //函数内部不行
reverse(arr);
printf("%s\n", arr);
return 0;
}
方法三:递归多个参数
int my_strlen(char* str)
{
int count = 0;
while (*str != '\0')
{
count++;
str++;
}
return count;
}
void reverse(char arr[], int left, int right)
{
char tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
if (left < right)
{
reverse(arr, left + 1, right - 1);
}
}
int main()
{
char arr[] = "abcdef"; // a b c d e f \0
//int sz = sizeof(arr) / sizeof(arr[0]); //函数内部不行
int left = 0;
int right = my_strlen(arr) - 1;
reverse(arr,left,right);
printf("%s\n", arr);
return 0;
}
题目5:计算一个数的每位之和
#include <stdio.h>
#include <string.h>
int DigitSum(int n)
{
if (n > 9)
return DigitSum(n / 10) + n % 10;
else
return n;
}
int main()
{
unsigned int n = 0;
scanf("%u", &n);
int sum = DigitSum(n);
printf("%d\n", sum);
return 0;
}
题目5:递归实现n的k次方
double Pow(int n,int k)
{
if (k > 0)
return n * Pow(n, k - 1);
else if (k == 0)
return 1;
else
return 1.0 / Pow(n, -k);
}
int main()
{
int n = 0;
int k = 0;
scanf("%d%d", &n, &k);
double ret = Pow(n, k);
printf("%f\n", ret);
return 0;
}
本网站原创文章版权归何大锤的狂飙日记所有。发布者:何大锤,转转请注明出处:何大锤的博客