c 做彩票网站,东莞地产公司网站建设,技术社区网站开发,东莞网站建设推广有哪些目录 递归类型例题1例题2例题3例题4例题5例题6 递归类型
例题1
根据下面递归函数#xff1a;调用函数Fun(2)#xff0c;返回值是多少#xff08; #xff09;int Fun(int n)
{if (n 5)return 2;elsereturn 2 * Fun(n 1);
}
A.2 B.4 C.8 D.16【答案】 D 【分析】 … 目录 递归类型例题1例题2例题3例题4例题5例题6 递归类型
例题1
根据下面递归函数调用函数Fun(2)返回值是多少 int Fun(int n)
{if (n 5)return 2;elsereturn 2 * Fun(n 1);
}
A.2 B.4 C.8 D.16【答案】 D 【分析】 1递归解题思路就是要注意递归的限制条件满足限制条件时递归就不再继续且每次递归调用之后都会接近这个限制条件 2由题目我们可以知道限制条件为n5当我们输入比5小的数时n是以每次增加1的趋势接近限制条件 流程如下第一次用画图软件画的不是很好看
例题2
通过用递归的方式实现求第n个斐波那契数
例如
输入5 输出5
输入10 输出55
输入2 输出1【分析】 1斐波那契数定义为jack00jack11jack(n)jack(n-1jackn-2n2,总之就是第n个数为n的前两个数相加的和 2我们根据斐波那契数的定义知jack11jack21因为jack00所以不管因此我们设定条件n1和n2时返回1限制条件而当n2是返回jack(n-1jackn-2实现递归趋近于限制条件 【代码】
int jack(int n)
{if (1 n || 2 n){return 1;}else{return jack(n - 1) jack(n - 2);}
}
int main()
{int n 0;scanf(%d, n);printf(%d, jack(n));return 0;
}例题3
编写一个函数实现n的k次方使用递归实现【分析】 1根据递归我们需要限制条件因为n在输入之后就无法改变因此我们需要对k进行设置即0k时我们返回1。 2当k大于0时我们为了让其趋近于限制条件因此k每次递推后就需要减1 【代码】
int jack(int n, int k)
{int sum 0;if (0 k){sum 1;return sum;}else if (k 0){k k--;sum n * jack(n, k);return sum;}elsereturn 0;
}
int main()
{int n, k;scanf(%d %d, n, k);printf(%d ,jack(n, k));return 0;
}例题4
写一个递归函数DigitSum(n)输入一个非负整数
返回组成它的数字之和
例如调用DigitSum(1729)则应该返回1729
它的和是19
输入1729输出19【分析】 1在看到返回值为个位 十位 百位…数字时我们一般都会用到求余%这样就可以将每位数单独提出来 2因为是要用到递归因此我们需要限制条件即当n10时直接返回n个位数而要有使递推趋近限制条件就需要用/号这样就会把最后一位数消去 【代码】
int jack(int n)
{if (n 10)return n;else{int sum n % 10 jack(n / 10);return sum;}
}
int main()
{int n 0;scanf(%d, n);printf(%d, jack(n));return 0;
}例题5
递归实现求n的阶乘不考虑溢出的问题【分析】 我们以n1返回1作为限制条件然后每次n减1 【代码】
int jack(int n)
{int sum 0;if (n 1){sum n * jack(n - 1);return sum;}if (1 n){sum 1;return sum;}
}
int main()
{int n 0;scanf(%d, n);printf(%d, jack(n));return 0;
}我们对前面的代码进行一些优化如下 【代码】
int jack(int n)
{
if(n1)
return 1;
return n*jack(n-1);
}
int main()
{int n 0;scanf(%d, n);printf(%d, jack(n));return 0;
}例题6
递归方式实现打印一个整数的每一位【分析】 这道题和例题4几乎一样所以就不进行分析了 【代码】
void jack(int n)
{if (n 0){if (n 9){printf(%d , n);}else{int sum 0;sum n % 10;jack(n / 10);printf(%d ,sum);}}
}
int main()
{int n 0;scanf(%d, n);jack(n);return 0;
}