| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1030 人关注过本帖, 1 人收藏
标题:一递归算法:求解释 ~详细点 谢谢
只看楼主 加入收藏
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
结帖率:66.67%
收藏(1)
已结贴  问题点数:10 回复次数:7 
一递归算法:求解释 ~详细点 谢谢
程序代码:
/*任何一个正整数都可以用2的幂次方表示。
例如;137= 2^7+2^3+2^0.  -->2(7)+2(3)+2(0) .
输入:正整数n  输出:符合n的 0,2表示*/
#include <iostream>
using namespace std;
stry(int n,int r)
{
  if(n==1)
cout<<"2("<<r<<")";
else
{
  stry(n/2,r+1);
if(n%2==1)
cout<<"+2("<<r<<")";
}
}
int main()
{
  int n;
cin>>n;
if(n>=1)
  stry(n,0);
else
cout<<"error"<<endl;
}
搜索更多相关主题的帖子: color 正整数 
2013-08-05 06:55
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2392
专家分:13384
注 册:2013-3-3
收藏
得分:0 
赞一个

Maybe
2013-08-05 08:04
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
回复 2楼 邓士林
楼主看不懂递归代码  让你逐句解释一下

DO IT YOURSELF !
2013-08-05 08:11
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:10 
程序代码:
#include <stdio.h>

int main()
{
    int dest[40]={0};
    int index=0;
    int j=0;
    for(int source1=2;source1<99;source1++)
    {
        int source=source1;
        for(int i=0;i<40;i++) dest[i]=0;
        printf("%d=",source);
        index=0;
        //辗转相除
        while(1)
        {
            dest[index]=source%2;
            source=source/2;
            index++;
            if (source==1) { dest[index]=1; break; }
        }
        //检索第一个1的位置
        for(j=0;j<index;j++)
        {
            if (dest[j]==1 ) break;
        }
        //以类似15=2^3+2^2+2^1+2^0的方式输出
        while(index>=0)
        {
            if(dest[index]!=0 && index>j )  printf("2^%d+",index);
            if(dest[index]!=0 && index==j)  printf("2^%d",index);
            index--;
        }
        printf("\n");
    }
    return 0;
}
不用递归也能实现   不过比递归啰嗦一些

DO IT YOURSELF !
2013-08-05 09:25
风雨123
Rank: 2
等 级:论坛游民
帖 子:84
专家分:65
注 册:2013-2-23
收藏
得分:0 
这个其实就是将10进制转化为2进制,最近刚刚接触算法,对递归我有点难以理解。   谢谢。
2013-08-05 17:00
qzpmww
Rank: 2
等 级:论坛游民
帖 子:7
专家分:31
注 册:2012-10-13
收藏
得分:0 
递归之我的个人理解:不知道楼主学编程的时间有多久,是否理解计算机执行程序时对子程序调用的原理。不过就我学c语言的理解来说,递归的原理是这样的:↓↓
①主程序main开始执行,到stry(n,0);
②调用子程序stry(int n,int r),执行处理stry(n,0)方法;
③因为n!=1,所以stry(n,0)方法还没执行完成,计算机就又开始调用子程序stry(int n,int r),执行处理stry(n/2,0);
④重复②,③,直到调用stry(int n,int r)时,n==1;
⑤因为n==1,stry(n,0)直接执行语句cout<<"2("<<r<<")",stry(1,0)结束;
⑥stry(1,0)结束,stry(2,0)可以执行stry(n/2,r+1)下一行的语句,stry(2,0)结束。
⑦重复执行⑥,直到stry(n,0)方法中stry(n/2,0)结束,stry(n,0)方法执行下一行语句,stry(n,0)方法结束,返回主程序。
⑧程序结束。

运行时程序的流程应该是这样的:
-----------------------------------------------------------------------|
| int n;                                                               |
| cin>>n;                                                           |
|      ----------------------------------------------------------------|
|     | stry(n,0)                                                    |           
|     |           |----------------------------------------------------|
|     |           |   stry(n/2,0)                                    |           
|     |           |          |-----------------------------------------|
|     |           |          | stry((n/2)/2,0)                      |           
|     |           |          |             ----------------------------|
|     |           |          |             |   ........             |           
|     |           |          |             |          -----------------|
|     |           |          |             |          | stry(1,0)      |           
|     |           |          |             |          |                |------处理完返回上一级
|     |           |          |             |          |                |
|----------------------------------------------------------------------|
     
     
程序结束
2013-08-06 00:03
molubingxue
Rank: 1
来 自:浙江
等 级:新手上路
帖 子:7
专家分:8
注 册:2013-8-21
收藏
得分:0 
#include<stdio.h>
main()
{
    int x,n;
    scanf("%d",&n);
    x=0;
    printf("%d=",n);
    while(n!=0)
    {
        if (n==1) break;
        if (n%2==1)
        {
            printf("2^%d+",x++);
        }
        else
        {
            x++;
        }
        n/=2;
    }
    if (n==1) printf("2^%d",x);
}

走起~

努力就有收获。
可有几人真正理解,做到。
真理在身边,忽略了,是你的错
2013-08-22 13:03
cs64881279
Rank: 2
等 级:论坛游民
帖 子:21
专家分:14
注 册:2013-8-15
收藏
得分:0 
自己在脑袋里面用几个数字,试试,就差不多能明白吧.....
2013-08-23 16:31
快速回复:一递归算法:求解释 ~详细点 谢谢
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018523 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved