找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 356|回复: 4

学会用递归的方法解题

[复制链接]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
发表于 2013-6-18 22:02:03 | 显示全部楼层 |阅读模式
1、斐波拉切数列
输出如下数列:
1 1 2 3 5 8 13 21 34 55

#include <iostream>
using namespace std;


int fibonacci(int i)
{
if(i==0)
{
return 0;
}
else if (i==1)
{
return 1;
}
else
{
return fibonacci(i-1) + fibonacci(i-2);
}
}


int main()
{
for(int i=1; i<10; i++)
{
cout<<"第"<<i<<"项的值为:"<<fibonacci(i)<<endl;
}


return 0;
}

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-18 22:02:55 | 显示全部楼层
递归求字符串长度


#include <stdio.h>


int my_strlen(const char *str);

int main()
{
[blockquote]printf("%d\n",my_strlen("chenqin"));


printf("%d\n",my_strlen(""));
printf("%d\n",my_strlen(NULL));


return 0;
[/blockquote]}


int my_strlen( const char *str )
{
[blockquote]if(str == NULL || *str == &#39;\0&#39;)
       return -1;
else
       return my_strlen(str+1) + 1;
[/blockquote]}

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-18 22:04:36 | 显示全部楼层
汉诺塔问题


#include <stdio.h>


unsigned int count = 0;


void hanoi(int n, char A, char B, char C)
{[blockquote]
if(n>0)
{
if (n == 1)
{
[/blockquote][blockquote]printf("%c->%c\n",A, C);
count++;
[/blockquote]
}
else
{
count++;
hanoi(n-1,A,C,B);
printf("%c->%c\n",A, C);
hanoi(n-1,B, A, C);

}
}
}


int main()
{[blockquote]
int n;


printf("How many dishes do you want to play?:");
scanf("%d",&n);
hanoi(n,&#39;A&#39;,&#39;B&#39;,&#39;C&#39;);
printf("Totall move %d times\n",count);
return 0;[/blockquote]
}

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-20 16:31:42 | 显示全部楼层
输出如下图形:
[attachment=309]

205

主题

173

回帖

6925

积分

论坛元老

积分
6925
 楼主| 发表于 2013-6-20 22:18:25 | 显示全部楼层

#include <iostream>
#include <cstring>
#define  MAX_LENGTH 65
#define  DIVS 6


using namespace std;


//************************************
// Method:    SubDivide
// FullName:  SubDivide
// Access:    public
// Returns:   void
// Qualifier:
// Parameter: char ch[]
// Parameter: int min
// Parameter: int max
// Parameter: int i
//************************************
void SubDivide(char ch[], int min, int max, int i)
{
    int mid = (min + max)/2;


    if(i == 0)
    {
        return;
    }
    ch[mid] = &#39;|&#39;;
    SubDivide(ch,min,mid,i-1);
    SubDivide(ch,mid,max,i-1);
}


int main()
{
    char ch[MAX_LENGTH];
    int i,max,min;


    /*初始化数组和第一行*/
    for(i=1; i<MAX_LENGTH-2;i++)
        ch = &#39; &#39;;
    max = MAX_LENGTH - 2;
    min = 0;
    ch[max] = ch[min] = &#39;|&#39;;
    ch[MAX_LENGTH-1] = &#39;\0&#39;;
    for(i=0; i<MAX_LENGTH-1;i++)
        cout << ch;
    cout<<endl;
    /*开始采用折半和递归的方法输出图形*/
    for(int i =1; i<=DIVS; i++)
    {
        /*先以空格填充行*/
        for(int j=1; j<MAX_LENGTH-2; j++)
            ch = &#39; &#39;;
        SubDivide(ch, min, max, i);
        cout<<ch<<endl;
        


    }
    getchar();


    return 0;
}
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

果子博客
扫码关注微信公众号

Archiver|手机版|小黑屋|风叶林

GMT+8, 2026-2-1 15:06 , Processed in 0.071991 second(s), 21 queries .

Powered by 风叶林

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表