简单递归练习

 1 #include<stdio.h>
 2 //#include<stdlib.h>
 3 int jiecheng(int i){
 4     //①算n!
 5     if(i==1)return 1;
 6     return i*jiecheng(i-1);
 7 }
 8 int Fibonacci(int i){
 9     //②算第i项斐波那契数列
10     if(i==1)return 1;
11     if(i==0)return 0;
12     return Fibonacci(i-1)+Fibonacci(i-2);
13 }
14 int power(int n,int k){
15     //③算n^k
16     if(k==1)return n;
17     return n*power(n,k-1);
18 }
19 int gcd(int m,int n){
20     //④用欧几里得算法算m与n的最大公约数
21     if(m%n==0)return n;
22     return gcd(n,m%n);
23
24 }
25 int DigitSum(int n){
26     //⑤输入一个非负整数,返回组成它的数字之和
27     if(n==0)return 0;
28     return (n%10)+DigitSum(n/10);
29 }
30 int DigitalRoot(int n){
31     //⑥整数n的数字根
32     if(n<10) return n;
33     return DigitalRoot(DigitSum(n));
34 }
35 int Comb(n,r){
36     //⑦计算组合数C(n,r);组合数C(n,r)=(P(n,r)/r!)=(n!/((n-r)!*r!));
37     //  存在如下公式:C(n,m)= C(n,n-m)= C(n-1,m-1)+C(n-1,m)
38     if(n==r||r==0)return 1;
39     return Comb(n-1,r-1)+Comb(n-1,r);
40 }
41
42 void main(){
43
44     printf("① %d\n",jiecheng(5));
45     printf("② %d\n",Fibonacci(6));
46     printf("③ %d\n",power(2,3));
47     printf("④ %d\n",gcd(18,24));
48     printf("⑤ %d\n",DigitSum(12345));
49     printf("⑥ %d\n",DigitalRoot(12345));
50     printf("⑦ %d\n",Comb(6,4));
51
52 }

结果:


简单递归练习,布布扣,bubuko.com

时间: 2024-12-29 23:23:11

简单递归练习的相关文章

斐波那契数列的实现(简单递归和动态规划)

斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 1 #include "stdafx.h" 2 #include <string> 3 using namespace std; 4 int f(int n) 5 { 6 if (n == 0) 7 { 8 return 0; 9 } 10 if (n == 1) 11 { 12 return 1; 13 } 14 return f(n - 1) + f(n - 2); 15 } 16 int _tmain(in

简单递归后台代码

void Page_Load(object sender, EventArgs e) { BindTree(0, null); } //一个方法从数据库中查询数据 DataTable dt=QueryTable("select * from t_NewsClass") public void BindTree(int Pid,TreeNode nodes) { foreach(DataRow dr in dt.Rows) { if(Convert.ToInt32(dr["Pa

POJ - 3087 Shuffle&#39;m Up (简单递归)

题意:将两个字符串模拟洗牌的操作合并问是否能得打答案,以及中间经过的次数,如果不能则输出-1 思路:这是一道模拟题,所以只需要写一个模拟操作,不断循环即可.同时还要判断循环结束条件(递归结束条件),如果自己手写一个例子的话就会发现其在不超过2*n(n为长度)次数就会洗回来 完整代码: #include <iostream> #include <cstdio> #include <cstring> #include <string> using namespa

java应用简单递归

毕业后就怎么学过算法,还在上学的时候学过数据结构,现在基本上都还给老师了,可惜老师学费没有还给我... 情景: 类似于给定一个数字,算他由多少个数字组成,比如:36 现在有10.5.1 ,那么最佳帅3个10,1个5,1个1组成(默认优先取最大).因为我们这边业务上面需要开发票,有的时候不想一个一个算,就让我们写一个.但是他发票的个数不是固定的.无尽的,所以每次就要判断下,如果:36 现在基数还是10.5.1 但是 只让你拿1个10.2个5.若干个1,那么组合应该是:1个10,2个5,16个1,大

一个强悍的极简单递归小例子帮你从程序执行的角度理解递归

1 public class test { 2 public static void main(String[] args) { 3 swap(3); 4 } 5 public static int i=1; //全局变量 6 public static void swap(int a){ //局部变量 7 if(a>0){ 8 a--; 9 System.out.println("第"+i+"层:"); 10 System.out.println("

汉诺塔的简单递归思想

最近在校招打酱油,闲得没事想起了大一学过的汉诺塔,不过那时只知道玩游戏,一次性3~7个玩过了,还是有成就感的呵呵.游戏链接:http://www.7k7k.com/swf/335.htm. 看了网上很多递归方法,像 1 #include<stdio.h> 2 3 void move(int n,char a,char b,char c) 4 { 5 if(n==1) 6 printf("\t%c->%c\n",a,c); 7 else 8 { 9 move(n-1,a

bjfu1277 简单递归

比较简单的递归问题.对于第k时刻的图形,可以平均分成四块,左上,右上,左下这三块的图形是一模一样的,右下的那一块不包含红毛僵尸,所以把那三块里的加起来就是结果了. /* * Author : ben */ #include <cstdio> #include <cstdlib> #include <cstring> #include <cmath> #include <ctime> #include <iostream> #inclu

简单递归之我见

递归:1. 就是函数自己直接或间接的调用自己. 也就是说最终要回到自己本身. 2. 就递归而言最重要的就是跳出结构. 因为跳出了才可以有结果 也就是说要有个if return语句.也同时就是临界条件. 3. 递归思想就是将一个问题转换为一个已解决的问题来实现 也就是说 假定递归函数已经写好.将最后前后项的关系写出来.最后递归到已解决的问题(正常情况下就是给定的if结果中)例:1-100: function foo( n ) { if ( n == 1 ) return 1; return n +

简单递归换递推。

//这是递归 #include<iostream> using namespace std; int f(int n) { if(n==0 || n==1) return 1; return f(n-2) + f(n/2); } int main() { int n; cin >> n; cout << f(n) << endl; return 0; } //这是递推 #include<iostream> using namespace std;