作者khoguan (Khoguan Phuann)
看板C_and_CPP
標題[碼] 9x9 乘法遞迴寫法兩種
時間Tue Jun 14 02:15:40 2005
※ 引述《hardcover (精裝版喔)》之銘言:
: 我是覺得代寫作業也沒什麼不好
: 不過前題是,寫出來的東西要夠創意
: 例如:排序用兩個loop,你一個就出來了
: 第一次看到九九乘法的作業是遞迴跑出來的
: 時候我也覺得有蠻多收獲的 XD
用遞迴方式,我試著寫了兩種版本,一種是用普通的 function,
一種是用 template。 感覺不太有趣,畢竟不如迴圈寫法簡潔明快。
template 的比較新奇一點點,但可惜不能在執行時期指定乘法表的
上下限數字。
// 9x9 multiplication table. recursive function version
#include <iostream>
using std::cout;
void nine_nine(int A = 0, int B = 0)
{
static int beg = A, end = B;
static int a = A, b = 1;
cout << a << " * " << b << " = " << a * b << '\n';
if (b == end && a == end) return;
else if (b == end) {
a++;
b = beg;
nine_nine();
}
else {
b++;
nine_nine();
}
}
int main()
{
nine_nine(1,9);
}
/*--------------------------------------------------------------*/
// 9x9 multiplication table. class template recursive ctor version
#include <iostream>
using std::cout;
template <int beg, int end>
struct Nine_Nine {
Nine_Nine() {
static int a = beg, b = 1;
cout << a << " * " << b << " = " << a * b << '\n';
if (b == end && a == end) return;
else if (b == end) {
a++;
b = beg;
Nine_Nine();
}
else {
b++;
Nine_Nine();
}
}
};
int main()
{
Nine_Nine<1,9> nine_nine;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.130.208.166
> -------------------------------------------------------------------------- <
作者: cplusplus (永夜) 看板: C_and_CPP
標題: Re: [碼] 9x9 乘法遞迴寫法兩種
時間: Tue Jun 14 03:36:31 2005
#include<iostream>
using namespace std;
template<int A,int B> struct T { T(){ cout<<A*B<<' '; T<A,B+1>(); } };
template<int A> struct T<A,10> { T(){ cout<<endl; T<A+1,1>(); } };
template<int B> struct T<10,B>{};
int main()
{
T<1,1>();
return 0;
}
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.115.205.46
推 Frozenmouse:讓我想到Prolog...|||220.137.235.177 06/14
推 jeunder:metaprogramming 是很有趣的技巧 61.230.216.86 06/14
推 aecho:好神奇 @@ 220.130.11.237 06/14
→ khoguan:對呀。拋磚引玉成功 @^^@220.130.208.166 06/14
→ sekya:這個的效率應該很好吧...理論上展開後就... 59.104.35.234 06/14
推 cplusplus:在這個例子裡並不好 並不是單純展開 :) 140.115.205.46 06/15
→ cplusplus:應該同遞迴深度100層吧 XD 140.115.205.46 06/15