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;
}