简单递归之我见

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

## 求幂

求幂就是求 某一个数 几次方

2*2 2 的 平方, 2 的 2 次方

求 n 的 m 次方

最终要得到一个函数 power( n, m )

n 的 m 次方就是 m 个 n 相乘 即 n 乘以 (m-1) 个 n 相乘
function power ( n, m ) {
    if ( m == 1 ) return n;  if ( m==0 )  return 1;
    return power( n, m - 1 ) * n;
}
 

时间: 2024-12-23 19:32:51

简单递归之我见的相关文章

简单递归练习

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

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

斐波那契数列的实现(简单递归和动态规划) 一.简单递归的实现 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

设计模式简单工厂之我见

最近开始学习JavaScript的设计模式.首先接触到的是简单工厂Simple Factory,有点小小的感悟.归结起来就是:明明可以 new A(),为什么偏偏要 createObject("A") 呢? 关于简单工厂这种设计模式,网上有很多文章讲了实现思路.用JavaScript可以实现如下: /** 版本1:普通实现 ************************ */ (function v1() { // 具体类A function A() { } // 具体类B func