函数
//1 吃苹果问题 每天吃三分之一再加一个,到最后一天只有一个。
/// <summary>
/// 吃苹果问题 每天吃三分之一再加一个,到最后一天只有一个。
/// </summary>
/// <param name="n">苹果数量</param>
/// <returns>最后一天是第几天</returns>
public int Recursion1(int n)
{
if (n==1)
{
return 1;
}
return 1 + Recursion1(n - (n / 3 + 1));
}
//2 数组中最大值
/// <summary>
/// 数组中最大值
/// </summary>
/// <param name="nums">数组</param>
/// <param name="length">数组长度</param>
/// <returns>数组中的最大值</returns>
public int Recursion2( int[] nums,int length)
{
if (length>1)
{
num = Recursion2(nums,length-1);
//如果num>nums[length-1]为true返回num,否则返回nums[length-1]
return (num>nums[length-1])?num:nums[length-1];
}
return nums[0];
}
//3 用递归调用的方法求n的乘积!
/// <summary>
/// 用递归调用的方法求1*2*3*....*n
/// </summary>
/// <param name="n"></param>
/// <returns>1*2*3*....*n的乘积</returns>
public int Recursion3(int n)
{
if (n<2)
{
return 1;
}
return n * Recursion3(n - 1);
}
//4 //用递归法求和1+2+3+4......+n
/// <summary>
/// 用递归法求和1+2+3+4......+n
/// </summary>
/// <param name="n"></param>
/// <returns>1+2+3+4......+n的和</returns>
public int Recursion4(int n)
{
if (n<2)
{
return 1;
}
return n + Recursion4(n - 1);
}
//5 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
/// <summary>
/// 1、1、2、3、5、8、13、21、34...... 求第30位数是多少, 用递归算法实现。
/// </summary>
/// <param name="n">第几位数</param>
/// <returns>第几位数的值</returns>
public int Recursion5(int n)
{
if (n<1)
{
return 0;
}
else if (n>0&&n<=2)
{
return 1;
}
return Recursion5(n-1)+Recursion5(n-2);
}
//6 将一整数逆序后放入一数组中(要求递归实现) Ex : 1234 变为 {4,3,2,1}
/// <summary>
/// 1234 变为 {4,3,2,1}
/// </summary>
/// <param name="index">从索引为index开始</param>
/// <param name="nums">写入值的数组</param>
/// <param name="n">整数</param>
/// <returns></returns>
public int Recursion6(int index,int[] nums,int n)
{
if (index<nums.Length)
{
//1234%10=4,index=0,nums[index]=4
//(1234-4)/10=123,n=123
//123%10=3,index=1,nums[index]=3
//(123-3)/10=12,n=12
//12%10=2,index=2,nums[index]=2
//(12-2)/10=1,n=1
//1%10=1,index=3,nums[index]=1
nums[index] = n % 10;
n = (n-n % 10) / 10;
return Recursion6(index+1, nums, n);
}
return 0;
}
//7 递归实现回文判断(如:abcdedcba就是回文,判断一个面试者对递归理解的简单程序)
/// <summary>
/// 递归实现回文判断
/// </summary>
/// <param name="str">判断的字符串</param>
/// <param name="index">从第几位索引开始</param>
/// <returns></returns>
public bool Recursion7(string str,int index)
{
if (str[index]==str[str.Length-1-index])
{
//索引为字符串长度的1/2时,返回true,int类型3/2=1;
if (index==(str.Length+1)/2)
{
return true;
}
return Recursion7(str,index+1);
}
return false;
}
//8 分解成质因数(如435234= 251 * 17 * 17 * 3 * 2 华为笔试题)
//9 喝啤酒问题
执行函数
int num = 3;
int res;
Recursion recursion = new Recursion();
res = recursion.Recursion1(num);
Console.WriteLine("Recursion1:" + res);
int[] nums = {1,2,3,4,5,6,78,8,9 };
res = recursion.Recursion2(nums, nums.Length);
Console.WriteLine("Recursion2:" + res);
res = recursion.Recursion3(5);
Console.WriteLine("Recursion3:" + res);
res = recursion.Recursion4(3);
Console.WriteLine("Recursion4:" + res);
res = recursion.Recursion5(7);
Console.WriteLine("Recursion5:" + res);
num = 1234;
nums=new int[num.ToString().Length];
res = recursion.Recursion6(0, nums, num);
Console.WriteLine("Recursion6");
foreach (var item in nums)
{
Console.Write(item +",");
}
string str = "abcddcba";
bool bl;
bl = recursion.Recursion7(str, 0);
Console.WriteLine("Recursion7:" + bl);
Console.ReadKey();
输出
Recursion1:2
Recursion2:78
Recursion3:120
Recursion4:6
Recursion5:13
Recursion6:4,3,2,1,
Recursion7:True