一道matlab作业题:假设从楼上到楼下有8个台阶,每一步有三种走法:走1个台阶;走2个台阶;走3个台阶,问可以有多少种方案?并将所有方案输出

matlab作业:假设从楼上到楼下有8个台阶,每一步有三种走法:走1个台阶;走2个台阶;走3个台阶,问可以有多少种方案?并将所有方案输出


malab 答案如下 最下面附有C语言程序有详细注释,看懂了,matlab也就懂了

第一个函数

function [] = mySum( )  %matlab界面调用此函数及可以得到结果
%UNTITLED Summary of this function goes here
%   Detailed explanation goes here
if nargin>0
    error('too many input arguments,this function has no input arguments');
end
global NUMBER;
global TOP;
global A;
global COUNTER;
NUMBER=0;
TOP=1;
COUNTER=0;
A=zeros(10);
disp('走法如下');
%传入参数0 为NUMBER的初始值 函数使用递归与栈进行运算
sum(NUMBER);
fprintf('总走法有 %d',COUNTER);
disp('种');
end

第二个函数
function [] =sum(number)
global TOP;
global A;
global COUNTER;
if (number==8)
    for n=1:TOP-1
        fprintf('%d',A(n));
       
    end
    fprintf('\n');
    COUNTER=COUNTER+1;

else if (number<8)
        push(1);
        pull();
        push(2);
        pull();
        push(3);
        pull();
    end
end
end

第三个函数
function [] = push(i)%相当于c语言的push
global TOP;
global A;
global NUMBER;
A(TOP)=i;
TOP=TOP+1;
NUMBER=NUMBER+i;
sum(NUMBER);
end

第四个函数
function [] =pull()%相当于C语言pull
global TOP;
global A;
global NUMBER;
NUMBER=NUMBER-A(TOP-1);
TOP=TOP-1;
end


C语言程序

#include<stdio.h>
int A[9]={0};//用作栈
int top=0;//top位置
int number=0;//记录栈中数据总和
int push(int i);//栈压入

int pull();//栈踢出顶层元素

int sum(int i);//递归主程序

int main()
{
   sum(NUMBER);//第一次传入的NUMBER为0 

   return 0;
}
int push(int i)
{
 A[top]=i;
 top++;
 number+=i;//змЪ§
 sum(number);
 return 0;
}
int pull()
{
    number=number-A[top-1];
 top--;
}
int sum(int i)
{
 if(i==8)//此处的I即指台阶数,若是100台阶,那就换做100即可
 {
  int n;
  for(n=0;n<top;n++)
   printf("%d ",A[n]);
  printf("\n");
  return 0;
 }
 else if(i>8)
  return 0;
 else
 {
  push(1);
  pull();
  push(2);
  pull();
  push(3);
  pull();
 }
 return 0;

}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值